读书人

Hibernate Annotation的奇怪有关问题?

发布时间: 2012-10-27 10:42:25 作者: rapoo

Hibernate Annotation的奇怪问题????
最近项目里决定用Hibernate Annotation,现在有一个问题:
现在有三个表:
order(uuid,name,....)
orderTerm(uuid,order_id,order_term,.....)
orderTermType(uuid,code,descr,......)
order表和orderTerm表是一对多的关系(order表中的uuid对应orderTerm表中的外键order_id) , orderTermType表和orderTerm表也是一对多的关系(orderTermType表中的code对应orderTerm表中的外键order_term)
现如下映射:
order.java :
......
@OneToMany(targetEntity = Order.class, cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
@JoinColumn(name = "order_id",referencedColumnName="uuid")
public List<OrderTerm> getOrderTerms() {
return OrderTerms;
}
......

orderTerm.java :
......
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "order_term", referencedColumnName = "code")
@OnDelete(action = OnDeleteAction.CASCADE)
public OrderTermType getOrderTermType() {
return orderTermType;
}

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "order_id", referencedColumnName = "uuid")
@OnDelete(action = OnDeleteAction.CASCADE)
public Order getOrder() {
return order;
}
.........

orderTermType.java
@OneToMany(targetEntity = OrderTerm.class, cascade = CascadeType.REM OVE, fetch = FetchType.LAZY)
@JoinColumn(name = "order_term",referencedColumnName="code")
public List<OrderTerm> getOrderTerms() {
return OrderTerms;
}

问题是:
从数据库中load了一个order对象,但是取到的List<OrderTerm>个数为0,也就是说获取不到关联的 orderTerm对象, 但是从数据库中load了一个orderTermType对象,可以从其中正常获取到关联的 orderTerm对象 , 配置都是一样的,为什么不行呢? 试了很多方法都不行,谢谢! 1 楼 antonyup_2006 2007-11-08 第一次load的时候,因为用了lazy,取到的list<orderterm>个数为0是对的,既然都是一对多的关系,在多这边加@manytone就以了,要是你要两边都设置,则可能要设置一下@mappingby,由其中一边来维护这个关联关系!可以试试--呵呵! 2 楼 zhan_jj 2007-11-08 谢谢antonyup_2006的回复,你所提供的方法其实我也有试过,但是不行,而且同样的配置为什么OrderTermType对OrderTerm的操作就可以,Order对OrderTerm的操作就不行呢? 谢谢! 3 楼 zhan_jj 2007-11-08 刚才又试了一下,得到一个结论,如果我用order表的name字段去做orderTerm的外键,就可以了,如果用主表的uuid(主键)去做子表的外键就不行,不知道为什么!
对了,我的主键uuid用的是sql server 2000的自动生成类型,不知道跟这个有没有什么关系?

读书人网 >软件架构设计

热点推荐