我有主要实体:
@Entity
@Table(name = "partners")
public class Partner {
@ElementCollection
@CollectionTable(
name = "external_login",
joinColumns = @JoinColumn(name = "partner_id")
)
private List<ExternalLogin> externalLogins;
...
}
并且ExternalLogin是嵌入式实体
@Embeddable
public class ExternalLogin {
@Column(name = "type")
@Enumerated(value = EnumType.STRING)
private ExternalLoginType type;
@Column(name = "login")
private String login;
@Column(name = "password_value")
private String passwordValue;
}
public enum ExternalLoginType {
ABC;
}
@Column
和@Enumerated
在ExternalLogin
实体中不起作用。例如,查询中的将是
external_login.passwordValue
而不是external_login.password_value
。@Enumerated(value = EnumType.STRING)
也不起作用。 Hibernate试图获取文件的int
值,而不是string
。谁能帮我?
最佳答案
您滥用了注释@Embeddable。请参见oracle docs https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html中的描述
定义一个类,其实例存储为拥有实体的固有部分并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到数据库表以进行访问
@Embeddable注释仅对奇异关联字段有意义。将列表字段注释为@Embeddable是错误的。
只需更换
@Embeddable
public class ExternalLogin {
至
@Entity
public class ExternalLogin {