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 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型