我有两张表A
和B
,只有简单的PK。
@Entity
public class A {
@Id
public int idA;
}
@Entity
public class B {
@Id
public int idB;
}
我想映射一个新的关联类AB,它只存储A
和B
之间的关系,复合PK idA
+ idB
。 AB
没有任何额外的列,只有idA
和idB
之间的关系。
是否可以使用单个类映射AB
?我想避免创建一个新的ABId
类,只是在@IdClass
中将其用作@EmbeddedId
或AB
,我不想将其与{ {1}}或@ManyToMany
上的{1}}关联。
答案 0 :(得分:3)
为什么要映射这样的连接表?只需使用A和B之间的ManyToMany关联。当您在A中包含的B列表中添加/删除B时,将自动处理此连接表。
请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e11402
如果您真的想这样做,那么只需使用@Id表示法映射这两个ID。主要类将是实体类本身(必须是可序列化的),如hibernate reference documentation中所述。请注意,这是特定于Hibernate的。
答案 1 :(得分:0)
如果@JBNizet的suggestion工作,那就太好了。不幸的是,有一个old bug使我无法在我使用的版本中采用它(3.3.1-GA)
我最终通过定义内部静态ID类并将其用作@IdClass
来对其进行排序:
@Entity
@Table(name="TABLE_AB")
@IdClass(value=ClassAB.ClassABId.class)
public class ClassAB implements Serializable {
private String idA;
private String idB;
@Id
public String getIdA(){ return idA; }
public void setIdA(String idA){ this.idA = idA; }
@Id
public String getIdB(){ return idB; }
public void setIdB(String idB){ this.idB = idB; }
static class ClassABId implements Serializable {
private String idA;
private String idB;
@Column(name="ID_A")
public String getIdA(){ return idA; }
public void setIdA(String idA){ this.idA = idA; }
@Column(name="ID_B")
public String getIdB(){ return idB; }
public void setIdB(String idB){ this.idB = idB; }
// HashCode(), equals()
}
}
这样我就不必定义新的公共类了,我也不必修改映射文件来包含ID类。