最近要解决一个遗留下来的系统,
里面有一个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,
这样子就可以了,反正运行起来了,不知道是否合理