我有主要实体:

@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

谁能帮我?

最佳答案

您滥用了注释@Embeddable。请参见oracle docs https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html中的描述


  定义一个类,其实例存储为拥有实体的固有部分并共享该实体的标识。嵌入对象的每个持久属性或字段都映射到数据库表以进行访问


@Embeddable注释仅对奇异关联字段有意义。将列表字段注释为@Embeddable是错误的。

只需更换

@Embeddable
public class ExternalLogin {




@Entity
public class ExternalLogin {

09-25 22:23
查看更多