cyqian 2008-11-13 18:20
浏览 262
已采纳

这种hibernate的一对多复合主键如何解决?

最近要解决一个遗留下来的系统,

里面有一个2个表 A,B A对B是一对多的关系

A:

ID
name

B:

ID
name
A_ID

B里面由 ID和A_ID共同决定一条唯一的记录,然后我把B里面的ID和A_ID 新建了一个B_PK.class,作为B的主键

然后B.java 如下

[code="java"]public class B {
private B_PK b_pk;
private A a;

。。。。

@ManyToOne
@JoinColumn(name="a_id")
public A getA() {
  return a;
}

}[/code]

但是这样定义的时候报错Repeated column in mapping for entity。。。

请问,类似于这样的问题,如何解决才好? 我觉得我解决的思路好像有问题
[b]问题补充:[/b]
最近要解决一个遗留下来的系统,

里面有一个2个表 A,B A对B是一对多的关系

A:

ID
name

B:

ID
name
A_ID

B里面由 ID和A_ID共同决定一条唯一的记录,然后我把B里面的ID和A_ID 新建了一个B_PK.class,作为B的主键

然后B.java 如下

public class B {
  private B_PK b_pk;
  private A a;

  。。。。

    @ManyToOne
    @JoinColumn(name="a_id")
    public A getA() {
      return a;
    }
}

但是这样定义的时候报错Repeated column in mapping for entity。。。

请问,类似于这样的问题,如何解决才好? 我觉得我解决的思路好像有问题


谢谢jones,我不用B_PK.class这个主键了,仿照
[code="java"]@Entity
@Table(name="VCUST")
@DiscriminatorValue("VCUST")
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="CUST_ID",referencedColumnName="ID"),
@PrimaryKeyJoinColumn(name="CUST_TYPE",referencedColumnName="TYPE")
})
public class ValuedCustomer extends Customer {
...
}[/code]

但是报错说:Caused by: org.hibernate.AnnotationException: No identifier specified for entity:

怎么会这样?我应该如何做?
[b]问题补充:[/b]
[color=red]---------- 谢谢 jones ,继续补充---------------[/color]

对于一般的复合主键,以上的答案早就解决问题了,但是现在报错:

Unable to find properties (a_id) in entity annotated with @IdClass:B_PK

因为复合主键的其中一个字段是多对一关联到A的
@JoinColumn(name="a_id") ,所以报了这个错,这里又不知道怎么处理了。

还请jones帮忙看一下
[b]问题补充:[/b]
搞定了,不是有没有什么副作用

@IdClass(B_PK.class)
@Entity
public class B {
private int ID;
private A a;
private int a_id;

@Id
public int getID(){
return ID;
}

@Id
public int getA_Id(){
return a_id;
}

。。。。

@ManyToOne
@JoinColumn(name="a_id")
public A getA() {
return a;
}
}

也就是在B里面增加一个a_id,

这样子就可以了,反正运行起来了,不知道是否合理

  • 写回答

4条回答 默认 最新

  • iteye_521 2008-11-14 09:49
    关注

    看看这个吧,你的B上必须用
    [code="java"] @IdClass(B_PK.class) [/code]
    声明你的B使用B_PK.class这个符合主键

    另外,可以参考这个:
    [url]http://melin.iteye.com/blog/197217[/url]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码