我在尝试找到解决方案时遇到了一些麻烦,我认为这可能根本不可能,但我仍然会在这里尝试一下。 因此,假设我的遗留数据库模式在MySQL上使用MyISAM(无FK)具有以下2个表:
TblOrder
ORDERID (INT) PK
CUSTOMERID (INT) PK
REPID (INT) PK
ISORDER (INT) PK
other columns...
TblOrderPos
ORDERID (INT) PK
POSITIONID (INT) PK
other columns
我的注释必须是什么样才能让TblOrder拥有一组TblOrderPos(由ORDERID识别)和TblOrderPos私有TblOrder实例?我确实为两个表创建了EmbeddedId对象,每次我尝试使用@ManyToOne创建一个属性或者@OneToMany重写@JoinColumns时,Hibernate抱怨PK列的数量不匹配(好吧)。
我真的希望有人有想法,或者是否有可能。
----------- ------------更新
在TblOrder上
@OneToMany(mappedBy="shoporder")
@JoinColumn(name="ORDERID")
public List<Orderposition> getOrderpositions(){
return this.positions;
}
public void setOrderPositions(List<Orderposition> positions){
this.positions = positions;
}
在TblOrderPos上
@ManyToOne
@JoinColumn(name="ORDERID")
public Shoporder getShoporder(){
return this.shoporder;
}
public void setShoporder(Shoporder order){
this.shoporder = order;
}
这是我不断得到的错误: 从TblOrderPos引用TblOrder的外键具有错误的列数。应该是4
答案 0 :(得分:1)
不推荐,但它可以使用composite-id:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html
答案 1 :(得分:0)
可以使用注释,因为我已经使用过这样的结构。
您是否正确使用@ManyToOne
注释与复合PK表连接?看起来应该是这样的:
@ManyToOne
@JoinColumns({
@JoinColumn(name = "WOJ_ID", referencedColumnName = "WOJ_ID"),
@JoinColumn(name = "POW_NR", referencedColumnName = "POW_NR"),
})
我正在使用@IdClass
注释并为复合PK提供类,一些示例在我对其他问题的回答中发布:
Why is my EmbeddedId in hibernate not working?