2015-06-16 5 views
6

ich folgende Entitätsklassen haben:konnte nicht Eigentum beheben: userId.username

@MappedSuperclass 
public class AbstractEntity implements Serializable, Comparable<AbstractEntity> { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    protected Integer id; 

    @Override 
    public int compareTo(AbstractEntity o) { 
     return this.toString().compareTo(o.toString()); 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

} 

@Entity 
@Table(name = "ticket") 
@NamedQueries({ 
    @NamedQuery(name = "Ticket.findAll", query = "SELECT t FROM Ticket t")}) 
public class Ticket extends AbstractEntity { 

    @Column(name = "title") 
    private String title; 
    @Column(name = "description") 
    private String description; 

    @Enumerated(EnumType.STRING) 
    @Column(name = "status") 
    private TicketStatus status; 

    @Enumerated(EnumType.STRING) 
    @Column(name = "priority") 
    private TicketPriority priority; 

    @Column(name = "categories") 
    private String categories; 
    @Column(name = "views") 
    private Integer views; 
    @Column(name = "date_time_created") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date dateTimeCreated; 

    @Column(name = "date_time_modified") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date dateTimeModified; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketId") 
    private List<TicketFollower> ticketFollowerList; 

    @JoinColumn(name = "project_id", referencedColumnName = "id") 
    @ManyToOne(optional = false) 
    private Project projectId; 

    @JoinColumn(name = "ticket_attachment_id", referencedColumnName = "id") 
    @ManyToOne 
    private TicketAttachment ticketAttachmentId; 

    @JoinColumn(name = "user_id", referencedColumnName = "id") 
    @ManyToOne(optional = false) 
    private User userId; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketId") 
    private List<TicketComment> ticketCommentList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "ticketId") 
    private List<TicketAttachment> ticketAttachmentList; 

    @Inject 
    public Ticket() { 
    } 


    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getDescription() { 
     return description; 
    } 

    ... 

    @Override 
    public String toString() { 
     return getTitle(); 
    } 

} 

@Entity 
@Table(name = "user") 
@NamedQueries({ 
    @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")}) 
public class User extends AbstractEntity { 

    @Enumerated(EnumType.STRING) 
    @Column(name = "role") 
    private Role role; 
    @Column(name = "username") 
    private String username; 
    @Column(name = "password") 
    private String password; 
    @Column(name = "first_name") 
    private String firstName; 
    @Column(name = "last_name") 
    private String lastName; 
    @Column(name = "email") 
    private String email; 
    @Column(name = "avatar_path") 
    private String avatarPath; 
    @Column(name = "date_time_registered") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date dateTimeRegistered; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userId") 
    private List<TicketFollower> ticketFollowerList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userId") 
    private List<Ticket> ticketList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userId") 
    private List<TicketComment> ticketCommentList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userId") 
    private List<ProjectFollower> projectFollowerList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userId") 
    private List<TicketAttachment> ticketAttachmentList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "userId") 
    private List<Project> projectList; 

    @Inject 
    public User() {} 

    public Role getRole() { 
     return role; 
    } 

    public void setRole(Role role) { 
     this.role = role; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

Ich erhalte diese Ausnahme von einer Hibernate Criteria zu schaffen. In meinem TicketDao Klasse habe ich eine Methode, die Suche Ticket nach Username, und wenn ich Code unten

Criteria criteria = session.createCriteria(Ticket.class); 
criteria.add(Restrictions.eq("userId.username", username)); 

aufrufen wirft ihn Ausnahme:

could not resolve property: userId.username of: com.entities.Ticket 

jedoch, wenn ich schreibe Kriterien wie:

criteria.add(Restrictions.eq("userId.id", userId)); 

es zeigt keine Ausnahme und gibt mir das Ergebnis zurück. Irgendeine Idee, warum meine Syntax für criteria.add(Restrictions.eq("userId.username", username)); und andere Eigenschaften wie Vorname, Nachname falsch ist?

Antwort

5

Criteria funktioniert nicht wie EL oder Java Methoden oder Attribute, können Sie nicht .-inneren Objekte mit einem Punkt beziehen.

Sie müssen eine Einschränkung in Ticket erstellen, richtig? Was hat Ticket? Ein User. Dann ... eine neue User erstellen haben, stellen Sie den username auf diese User und dann die erstellt User auf Ticket ‚s Kriterien:

Criteria criteria = session.createCriteria(Ticket.class); 
User user = new User(); 
user.setUsername(username); 
criteria.add(Restrictions.eq("user", user)); 
+0

Aber ich nicht das userId, ich bin auf der Suche nach' Kriterien .add (Restrictions.eq ("userId.username", Benutzername)) 'ist das möglich? – Kapparino

+0

benutze den 'username' im Benutzer dann ... check my edit, ich fügte weitere Erklärungen hinzu –

+0

Problem ist meine Entität Der Benutzer hat keinen Konstruktor mit Benutzernamen. Ich denke, ich muss Logik ändern ... – Kapparino

Verwandte Themen