hibernate @COLUMN和@ENUMERATED在嵌入实体中不起作用

1tuwyuhd  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(181)

我有一个主要的实体:

@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)也不起作用。休眠正在尝试获取字段的int值,而不是string
有谁可以帮我?

guicsvcw

guicsvcw1#

您误用了注解*@Embedble*。请参阅Oracle文档中的说明https://docs.oracle.com/javaee/6/api/javax/persistence/Embeddable.html
定义一个类,该类的示例存储为所属实体的固有部分,并共享该实体的标识。嵌入对象的每个持久属性或字段被Map到实体的数据库表

  • @Embedble注解仅对单数关联字段有意义。将列表字段注解为@Embeddable*是错误的。

只要更换就行了

@Embeddable
public class ExternalLogin {

@Entity
public class ExternalLogin {
ha5z0ras

ha5z0ras2#

我刚才也遇到了同样的问题。对我来说,解决方案最终是添加

@Access(FIELD)

添加到可嵌入对象。

相关问题