我有一个主要的实体:
@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。
有谁可以帮我?
发布于 2018-01-26 17:51:39
您误用了注解@Embeddable。请参阅oracle docs https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html中的说明
定义了一个类,该类的实例被存储为所属实体的固有部分,并共享该实体的标识。嵌入对象的每个持久属性或字段被映射到实体的数据库表
@Embeddable注解仅对单个关联字段有意义。将列表字段注释为@Embeddable是错误的。
只需替换
@Embeddable
public class ExternalLogin {至
@Entity
public class ExternalLogin {https://stackoverflow.com/questions/48456881
复制相似问题