2015-06-16 24 views
6

Ho seguenti classi di entità:Impossibile risolvere proprietà: 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; 
    } 

ottengo questa eccezione da creare un hibernate Criteria. Nella mia classe TicketDao Ho un metodo che biglietto di ricerca per nome utente, e quando invoco codice qui sotto

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

viene generata un'eccezione:

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

Tuttavia, quando scrivo criteri come:

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

non mostra alcuna eccezione e mi restituisce risultato. Qualche idea sul perché la mia sintassi per criteria.add(Restrictions.eq("userId.username", username)); e altre proprietà come nome, cognome sia errata?

risposta

5

Criteria non funziona come EL o Java metodi o attributi, non è possibile fare riferimento a oggetti interni con un punto ..

Devi creare una restrizione in Ticket, giusto? Cosa contiene Ticket? An User. Poi ... è necessario creare un nuovo User, impostare il username a questo User e quindi impostare il creato User a Ticket s' criteri:

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

Ma non ho l'ID utente, sto cercando da 'criteri .add (Restrictions.eq ("userId.username", username)) 'è possibile? – Kapparino

+0

usa 'username' nell'utente quindi ... controlla la mia modifica, ho aggiunto ulteriori spiegazioni –

+0

Il problema è la mia entità L'utente non ha costruttore con nome utente. Penso che avrò bisogno di cambiare la logica ... – Kapparino

Problemi correlati