0

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

4

2 回答 2

1

不建议这样做,但可以使用复合 ID:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html

于 2012-04-11T14:01:48.937 回答
0

注释是可能的,因为我使用过这样的结构。

您是否正确使用@ManyToOne注释与具有复合 PK 的表链接?它应该是这样的:

@ManyToOne
    @JoinColumns({
        @JoinColumn(name = "WOJ_ID", referencedColumnName = "WOJ_ID"),
        @JoinColumn(name = "POW_NR", referencedColumnName = "POW_NR"),
        })

我正在使用@IdClass注释并为复合 PK 提供类,在我对其他问题的回答中发布了一些示例: 为什么我的 EmbeddedId 在休眠中不起作用?

于 2012-04-11T14:38:04.760 回答