您能否举例说明以下情况的Hibernate映射:
foo
)foo_id
)
子表(bar
),其复合键由
a)父表的外键(foo_id
)
b)类型字符串
item
)
答案 0 :(得分:4)
我还没有完全按照你的要求行事,但这可能会让你朝着正确的方向前进。我认为它应该有效。这个page更详细地解释了这些注释。
@Entity
public class Foo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId(){
}
...
@OneToMany(mappedBy="foo")
public Collection<Bar> getBars() {
}
...
}
@Entity
@IdClass(BarPk.class)
public class Bar implements Serializable {
@ManyToOne
@JoinColumn(name="foo")
@Id
public Foo getFoo() {
return foo;
}
@Column(name="key", length=255)
@Id
public String getKey(){
}
}
@Embeddable
public class BarPk implements Serializable {
public Foo getFoo() {
return foo;
}
public void setFoo(Foo foo) {
}
public String getKey(){
...
}
public void setKey(String key){
...
}
//you must include equals() and hashcode()
}
答案 1 :(得分:0)
是的,您应该使用以下映射
@Entity 公共课家长{
@Id
private Integer id;
@CollectionOfElements
@JoinTable(
name="Child",
joinColumn=@JoinColumn(name="PARENT_ID"))
@IndexColumn("childIndex")
private List<Child> childList = new ArrayList<Child>();
}
注意@CollectionOfElements和IndexColumn是Hibernate特定的注释,而不是JPA 1.0规范。 JPA 2.0将介绍它们。
@Embeddable 公共课儿童{
// @Embeddable class does not contains identifiers
// child class specific property's
}
因此以下代码可以正常使用
父母=新父母();
parent.getChildList()。add(new Child()); parent.getChildList()。add(new Child()); //其他孩子
session.save(父); //将保存父母和两个孩子
此问题的缺点是@CollectionOfElements注释仅适用于@Embeddadble类,而不适用于Entity类。如果您想将Child类作为Entity类,我希望看到解决方案。不可能同时将@Entity和@Embeddable注释应用于类。
此致 Arthur Ronald F D Garcia(Java程序员) 纳塔尔/ RN - 巴西