假设我有一个名为User的类和一个类ExtendedUser,它是User的子类。这两个类都使用hibernate(JPA)注释进行映射:
用户:
@Entity
@Table("user-table")
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
}
ExtendedUser:
@Entity
@Table(name = "extended-user-table")
@PrimaryKeyJoinColumn(name="id")
public class ExtendedUser extends User{
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
}
有时需要将用户提升为ExtendedUser;类似地,有时需要将ExtendedUser降级为用户。
第一个问题: hibernate有没有办法直接执行此操作?
无法找到这样的方法我尝试执行以下操作(降级示例):
但是,在尝试保存新用户时,这似乎会自动增加id。所有这一切都是在交易中完成的 - 这可能是原因吗?但是,我不想将它们带到事务之外,因为如果保存失败,则自动回滚将不起作用。
第二个问题(如果第一个问题的答案为否):我如何解决ID自动递增的问题。
提前致谢。
答案 0 :(得分:2)
我认为问题应该在OOD上解决,而不是在数据库级别上解决。你所做的是一个很好的快捷方式 - 只要你不尝试做你想做的事情。
我会将登录凭据删除到他们自己的“登录”类中,并保持用户不变。不要将User提升为ExtendedUser,只需添加一个Login即可完成。与Login有关系的每个用户都是“ExtendedUser”。