JPA继承:将派生实体映射到不同的表

时间:2012-07-08 06:27:32

标签: jpa eclipselink single-table-inheritance

我使用SINGLE_TABLE继承startegy来映射我的usres(参见下面的代码示例)。

有没有办法将 UnActiveRegularUser UnActiveBusinessUser “ACTIVE_USERS”表映射到另一个表,例如“UNACTIVE_USERS” 并保持继承性能?

注意:

- 这里的要点是避免ex之间的代码重复。 RegularUser与UnActiveRegularUser(因为它们使用相同的属性)但仍然将它们映射到2个不同的表:“ACTIVE_USERS”和“UNACTIVE_USERS”。

-strategy =不应更改InheritanceType.SINGLE_TABLE。

- 可以添加另一个抽象层来解决这个问题吗?

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "ACTIVE_USERS")
public class User {
    @Id @GeneratedValue
    protected Long id;

    @Column(nullable = false)
    protected String name;
}


@Entity
public class RegularUser extends User{
//more getters and settres
}

@Entity
public class UnActiveRegularUser extends User{
//same getters and setters as in RegularUser
}

@Entity
public class BusinessUser extends User {
//more getters and settres
}

@Entity
public class UnActiveBusinessUser extends User {
//same getters and setters as in BusinessUser
}

谢谢, 森

1 个答案:

答案 0 :(得分:0)

将字段保留到另一个表不会阻止代码重复。我认为您应该UnActiveBusinessUser延长BusinessUserUnactiveRegularUser延长RegularUser

请注意,如果用户可能变得不活跃(即它是RegularUser并成为UnactiveRegularUser),则继承不是正确的解决方案:对象不能从一种类型转到另一种类型。由于看起来UnactiveRegularUser没有比RegularUser更多的东西,我不确定这个子类是否有用。