2015-06-16 23 views
6

Mam następujących klas jednostki:nie mógł rozwiązać właściwość: 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; 
    } 

otrzymuję ten wyjątek od stworzenia hibernacji Criteria. W moim TicketDao klasy Mam metodę, która biletów wyszukiwania przez nazwę użytkownika, a kiedy wywołać kod poniżej

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

zgłasza wyjątek:

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

Jednak, gdy piszę kryteria jak:

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

nie pokazuje żadnego wyjątku i zwraca wynik. Każdy pomysł, dlaczego moja składnia dla criteria.add(Restrictions.eq("userId.username", username)); i innych właściwości, takich jak imię, nazwisko jest błędne?

Odpowiedz

5

Criteria nie działa jak EL lub Java metod lub atrybutów, nie może odnosić się do wewnętrznych obiektów z kropką ..

Musisz utworzyć ograniczenie w Bilecie, prawda? Co ma Ticket? An User. Potem ... trzeba utworzyć nowy User ustaw username do tego User a następnie ustawić utworzony User do Ticket „s kryteria:

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

Ale nie mam identyfikator użytkownika, szukam przez' kryteriów .add (Restrictedions.eq ("userId.username", nazwa użytkownika)) 'czy to możliwe? – Kapparino

+0

użyj 'username' w użytkowniku, a następnie ... sprawdź moją edycję, dodałem więcej wyjaśnień –

+0

Problem to moja encja Użytkownik nie ma konstruktora z nazwą użytkownika. Myślę, że będę musiał zmienić logikę ... – Kapparino