枚举的 JPA 地图集合

2022-08-31 10:00:00

在 JPA 中,有没有办法映射实体类中的枚举集合?或者唯一的解决方案是用另一个域类包装Enum并使用它来映射集合?

@Entity
public class Person {
    public enum InterestsEnum {Books, Sport, etc...  }
    //@???
    Collection<InterestsEnum> interests;
}

我正在使用Hibernate JPA实现,但当然更喜欢与实现无关的解决方案。


答案 1

使用休眠,你可以做

@ElementCollection(targetElement = InterestsEnum.class)
@JoinTable(name = "tblInterests", joinColumns = @JoinColumn(name = "personID"))
@Column(name = "interest", nullable = false)
@Enumerated(EnumType.STRING)
Collection<InterestsEnum> interests;

答案 2

Andy 的答案中的链接是在 JPA 2 中映射“非实体”对象集合的一个很好的起点,但在映射枚举时并不完全完整。这是我想到的。

@Entity
public class Person {
    @ElementCollection(targetClass=InterestsEnum.class)
    @Enumerated(EnumType.STRING) // Possibly optional (I'm not sure) but defaults to ORDINAL.
    @CollectionTable(name="person_interest")
    @Column(name="interest") // Column name in person_interest
    Collection<InterestsEnum> interests;
}

推荐