我想使用注释而不是XML来配置此映射。
这是映射配置(为公共消费而清理):
<hibernate-mapping package="com.test.model">
<class name="Parent" table="parent">
<composite-id name="id" class="ParentCompositeKey">
<key-property name="first_id" type="long" column="first_id"/>
<key-property name="second_id" type="long" column="second_id"/>
</composite-id>
<set name="parentChildren" table="parent_child" inverse="true" cascade="all">
<key on-delete="cascade">
<column name="first_id"/>
<column name="second_id"/>
</key>
<one-to-many class="Child" />
</set>
</class>
</hibernate-mapping>
Parent
有一个由两个Long
组成的复合主键。 Child
有一个复合主键,由父级的复合主键和另外的Long
组成。当我删除Parent
时,目的是删除相关的Child
记录。 (显然,这些孩子无法自生自灭。)
这是一种单向关系。在Child
方面,我无需查找Parent
。
我是JPA注释的初学者。我查看了文档并尝试了@OneToMany
和@JoinTable
与@JoinColumns
的各种组合来解决我的问题。
这个question并没有给我带来希望,但我认为如果它在XML中有效,它应该可以用注释来实现。
任何建议表示赞赏。
答案 0 :(得分:2)
这是Hibernate Annotations documentation的链接,涵盖了您想要的大部分内容。得到的映射将是:
@Embeddable
public class ParentCompositeKey implements Serializable {
public long getFirstId() { ... }
public long getSecondId() { ... }
// setters
}
@Entity
public class Parent implements Serializable {
@Id
public ParentCompositeKey getId() { ... }
@OneToMany(cascade=CascadeType.ALL)
@JoinColumns ({
@JoinColumn(name="first_id"),
@JoinColumn(name="second_id")
})
public List getParentChildren() { ... }
// setters
}
这假设你没有连接表(你的命名方案有点不清楚你是否这样做)。但是,如果您这样做,则只需添加@JoinTable
注释并在其中移动@JoinColumns
。