Hibernate使用遗留数据库架构和复合FK和PK

时间:2012-04-11 13:59:21

标签: java hibernate

我在尝试找到解决方案时遇到了一些麻烦,我认为这可能根本不可能,但我仍然会在这里尝试一下。 因此,假设我的遗留数据库模式在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

2 个答案:

答案 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?