2012-05-25 2 views
0

Имейте проблему с спящим режимом. У меня есть ПользовательHibernate One-To-Many

@Entity 
@Table(name = "user") 

public class User { 
@Id 
@Column(name = "user_id") 
@GeneratedValue 
private Long userId; 

@Column 
@NotBlank(message = "Fill login") 
private String login; 

@OneToMany(fetch=FetchType.LAZY,mappedBy="user") 
private List<Order> orders; 

public List<Order> getOrders() { 
    return orders; 
} 
public void addOrders(Order order) { 
    this.orders.add(order); 
} 

Также как и вы можете видеть, что пользователь имеет заказы. Таким образом, в ПОРЯДКА таблице у меня есть FK, которые указывают на user_id так вот это мое лицо Заказать

@Entity 
@Table(name = "order") 
public class Order { 

    @Id 
    @Column(name="order_id") 
    @GeneratedValue 
    private long orderId; 
    @Column 
    private long user_id; 
    @Column 
    private Date dateBegin; 
    private Date dateEnd; 

} 

и вот мой блок Test

public class HibernateTutorial extends BaseTest{ 

    @Autowired 
    SessionFactory sessionFactory; 
    @Test 
    public void hibernateTutorial(){   
     System.out.print(sessionFactory);  

     List<User> users = sessionFactory.getCurrentSession().createQuery("from User").list(); 
     List<Order> orders = users.get(0).getOrders(); 

     System.out.print(orders); 
     Assert.assertNotNull(users);  

    } 

} 

У меня есть исключение, когда я запустить его:

Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property entity.Order.user in entity.User.orders 
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:576) 
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:541) 
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1177) 
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:324) 
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1162) 
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717) 
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
... 38 more 

Что я делаю неправильно?

ответ

0

Вам нужен экземпляр пользователя в вашем классе Order.

Вот example of One-to-many.

Таким образом, вы можете добавить что-то вроде этого в класс Order:

private User user; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "user_id") 
public User getUser() { 
    return this.user; 
} 
+0

У u означает частный пользователь; –

+0

Да, отредактировал мой ответ, чтобы включить фрагмент кода. Это займет место @Column private long user_id; в классе Order. – Seth

+0

Зафиксировали ли вы свои исключения? – Seth

0

Это:

@Column 
private long user_id; 

должна быть заменена ссылкой на

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="user_id") 
private User user; 

и отображение много-к-одному.

+0

Не удалось определить тип для: entity.User, at table: order, for columns: [org.hibernate.mapping.Column (user)] –

+0

Я добавил отображение, вы все равно получаете ту же ошибку? – stevedbrown

0

Атрибут mappedBy указывает поле в связанной таблице, которое определяет отношение. Если вы хотите сохранить mappedBy как есть, вам нужно будет добавить:

private User user; 

К вашему заказу относится класс. Кроме того, вам нужно добавить @ManyToOne с этой стороны отношения и определить семантику столбца объединения. Двунаправленность не всегда является обязательным требованием, но в этом случае кажется, что ваша деловая потребность заключается в том, чтобы получить пользователя для заказа на знание, и это правильный подход.

Как правило, вы должны использовать полные отношения Object между объектами Hibernate, а не сущности ссылаться на значения id друг друга. Hibernate будет правильно управлять сохранением и обновлением для вас, а выбор идентификаторов и полных объектов достаточно прост, чтобы управлять самостоятельно.