我的简化实体情景如下:
PERSON与特定角色(哈欠)中的公司相关联。
我的第一个想法是在PERSON和COMPANY之间配置ManyToMany关系。 然而,显然,我不能在ROLE表中包含ROLE的类型(作为另一个字段的两个外键)。
我承认这样做的正确方法是使用两个OneToMany关系并将ROLE作为一个实体包含在其自身(answered already on stackoverflow)中。
但这就是我陷入困境的地方: 我使用html表单将一个人添加到公司并选择适当的角色,如何将其保存到数据库或更好:我如何告诉Hibernate保存它。一个人有一个清单,公司也是如此。角色有个人和公司。他们如何在中间见面?所以基本上我要问的是:
确切的Hibernate映射配置如何才能在一个步骤中保存公司中具有角色的人员?
答案 0 :(得分:1)
查看Cascading和Table继承。例如,下面的代码将代表三个表。公司表,具有CATG的角色表和用户表。角色表将使用单表继承,其中CATG将由hibernate管理,而hibernate将根据CATG列值和映射创建正确的类。并且级联将与用户同时插入角色。
@Table( name = "USER" )
Public User
{
@ManyToOne( fetch = FetchType.LAZY )
@JoinColumn( cascade = CascadeType.ALL, name="ROLE_NAME" )
private CompanyRole role;
}
@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn( name="CATG", discriminatorType=DiscriminatorType.STRING )
@Table( name = "Role" )
public Role
{
}
@DiscriminatorValue( "CMPY_ROLE" )
public CompanyRole extends Role
{
private Company company
}
@Table( name = "COMPANY" )
Public Company
{
}