休眠继承 - 将关系设置为 null



我试图理解为什么Hibernate在插入(JPA保存)时在值中添加我的模型名称,但我无法弄清楚为什么。

下面是实体模型:

@Entity
@Table(name = "USER")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "person_type")
@Getter
@Setter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private int id;
@Column(name = "username", unique = true)
private String username;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@Any(metaColumn = @Column(name = "person_type", insertable = false))
@AnyMetaDef(idType = "int", metaType = "string",
metaValues = {
@MetaValue(targetEntity = Candidate.class, value = "CANDIDATE"),
@MetaValue(targetEntity = Company.class, value = "COMPANY"),
})
@JoinColumn(name="person_id", insertable = false)
private Object person = null;
}

多态性非常有效。问题是,当我注册一个新用户时,默认情况下应该将person_typeperson_id设置为 null,执行的查询如下:

insert into `USER` (`email`, `password`, `username`, `person_type`) values (?, ?, ?, ?, 'User')

要插入的代码: user.setPassword(passwordEncoder.encode(user.getPassword())); userRepository.save(user);

我什至尝试在插入之前添加行user.setPerson(null),但它是一样的。

请问有什么想法吗?

据我所知,基类需要是一个非实体类,并用@MappedSuperclass注释。

即您需要一个@MappedSuperclass BaseUser.class,然后将其扩展为@Entity User extends BaseUser@Entity SuperUser extends BaseUser.

VladMihalcea - 继承自基类 JPA/Hibernate

只需将@DiscriminatorValue("null")添加到用户实体即可。

详细答案:映射未知鉴别器InheritanceType.SINGLE_TABLE的休眠实体值

最新更新