Hibernate - @ManyToMany在映射实体中包含其他字段

时间:2009-04-23 15:26:56

标签: hibernate many-to-many

我的简化实体情景如下:

PERSON与特定角色(哈欠)中的公司相关联。

我的第一个想法是在PERSON和COMPANY之间配置ManyToMany关系。 然而,显然,我不能在ROLE表中包含ROLE的类型(作为另一个字段的两个外键)。

我承认这样做的正确方法是使用两个OneToMany关系并将ROLE作为一个实体包含在其自身(answered already on stackoverflow)中。

但这就是我陷入困境的地方: 我使用html表单将一个人添加到公司并选择适当的角色,如何将其保存到数据库或更好:我如何告诉Hibernate保存它。一个人有一个清单,公司也是如此。角色有个人和公司。他们如何在中间见面?所以基本上我要问的是:

确切的Hibernate映射配置如何才能在一个步骤中保存公司中具有角色的人员?

1 个答案:

答案 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 
{
}