我在尝试找到解决方案时遇到了一些麻烦,我认为这可能根本不可能,但我仍然会在这里尝试一下。 因此,让我们假设我在 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 是一个私有(private) 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
最佳答案
不推荐,但可以使用composite-id:
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html
关于java - 具有旧数据库架构和复合 FK 和 PK 的 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107455/