我有主要实体:
@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
。
任何人都可以帮助我吗?
答案 0 :(得分:1)
您滥用注释 @Embeddable 。请参阅oracle docs https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html
中的说明定义一个类,其实例存储为拥有实体的内在部分并共享实体的标识。嵌入对象的每个持久属性或字段都映射到权限
的数据库表
@Embeddable 注释仅适用于奇异的相关字段。将列表字段注释为 @Embeddable 是错误的。
只需替换
@Embeddable
public class ExternalLogin {
到
@Entity
public class ExternalLogin {