@Column和@Enumerated在embeded实体中不起作用

时间:2018-01-26 06:55:13

标签: java hibernate

我有主要实体:

@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@EnumeratedExternalLogin实体中不起作用。

例如,在查询中,external_login.passwordValue代替external_login.password_value

@Enumerated(value = EnumType.STRING)也不起作用。 Hibernate试图将int的值改为string

任何人都可以帮助我吗?

1 个答案:

答案 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 {