2

我的简化实体方案如下:

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

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

我承认这样做的正确方法是使用两个 OneToMany 关系并将 ROLE 作为一个实体单独包含(已在 stackoverflow 上回答)。

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

准确的 Hibernate 映射配置如何让我可以一步保存具有公司角色的人员?

4

1 回答 1

2

查看级联和表继承。例如,下面的代码将代表三个表。一个公司表、一个带有 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 
{
}
于 2009-04-23T17:58:12.367 回答