2015-03-18 4 views
0

Hibernate новичок здесь, столкнувшись с проблемами, пытающимися правильно сопоставить отношения между моими классами Hibernate Entity.Hibernate Relationship Mapping Issue

У меня есть объект Билета и Пользовательский объект. У пользователя много билетов, но билет принадлежит только одному уникальному пользователю. То, что я сделал, сопоставлено с Пользовательскими билетами как отношения @OneToMany, а Билеты - Пользователь как отношение @ManyToOne. Однако я не получаю никаких билетов.

Запросов спящего режима работает это:

Hibernate: select tickets0_.user_user_id as user1_1_3_, tickets0_.tickets_ticket_id as tickets2_3_, ticketenti1_.ticket_id as ticket1_0_0_, ticketenti1_.assigned_to_user_id as assigned7_0_0_, ticketenti1_.belongs_to_user_id as belongs8_0_0_, ticketenti1_.date_created as date2_0_0_, ticketenti1_.description as descript3_0_0_, ticketenti1_.status_id as status4_0_0_, ticketenti1_.title as title0_0_, ticketenti1_.urgency_id as urgency6_0_0_, userentity2_.user_id as user1_1_1_, userentity2_.email as email1_1_, userentity2_.firstname as firstname1_1_, userentity2_.lastname as lastname1_1_, userentity2_.password as password1_1_, userentity2_.role_id as role6_1_1_, userentity2_.username as username1_1_, userentity2_.verified as verified1_1_, userentity3_.user_id as user1_1_2_, userentity3_.email as email1_2_, userentity3_.firstname as firstname1_2_, userentity3_.lastname as lastname1_2_, userentity3_.password as password1_2_, userentity3_.role_id as role6_1_2_, userentity3_.username as username1_2_, userentity3_.verified as verified1_2_ from user_ticket tickets0_ inner join ticket ticketenti1_ on tickets0_.tickets_ticket_id=ticketenti1_.ticket_id left outer join user userentity2_ on ticketenti1_.assigned_to_user_id=userentity2_.user_id left outer join user userentity3_ on ticketenti1_.belongs_to_user_id=userentity3_.user_id where tickets0_.user_user_id=? 

Классы сущностей являются:

TicketEntity.java

@Entity 
@Table(name="ticket") 
public class TicketEntity { 

@Id 
@Column(name="ticket_id") 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 

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

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

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

@Column(name="status_id") 
private int status_id; 

//private TicketStatus status; 

@Column(name="urgency_id") 
private int urgency_id; 

@ManyToOne 
@JoinColumn(insertable=false, updatable=false) 
private UserEntity belongs_to; 

@ManyToOne 
@JoinColumn(insertable=false, updatable=false) 
private UserEntity assigned_to; 

UserEntity.java

@Entity 
@Table(name="user") 
public class UserEntity { 

@Id 
@Column(name="user_id") 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 

@Column(name="firstname") 
private String firstname; 

@Column(name="lastname") 
private String lastname; 

@Column(name="username") 
private String username; 

@Column(name="email") 
private String email; 

@Column(name="password") 
private String password; 

@Transient 
private String confirmpassword; 

@Column(name="verified") 
private boolean verified; 

@Column(name="role_id") 
private int role_id; 

@OneToMany(fetch = FetchType.EAGER) 
private List<TicketEntity> tickets; 

Любая помощь с учётом,

Thanks!

ответ

0

В UserEntity.java, вам нужно добавить "mappedBy" для List<TicketEntity> tickets, как это:

@OneToMany(fetch = FetchType.EAGER, mappedBy="belongs_to")//why you have two UserEntity in TicketEntity.java? 
private List<TicketEntity> tickets; 

В TicketEntity.java, добавьте (имя = "user_id") в @JoinColumn для UserEntity belongs_to, как это :

@ManyToOne 
@JoinColumn(name = "user_id", insertable=false, updatable=false) 
private UserEntity belongs_to; 

То же самое для private UserEntity assigned_to. Возможно, вам понадобится добавить еще один список в UserEntity.java, если вы хотите запросить его также.