JPA:在单个字段中存储整数列表

2022-09-02 01:37:44

是否可以使用标准 JPA 2 将整数列表存储在相应实体表的单个字段中?

@Entity
@Table(name="tbl_myentities")
public class MyEntity {

@ElementaryCollection
@Column(name="vals") // in table tbl_myentities
private List<Integer> vals;

答案 1

无法在单个字段中存储多个值。将它们存储在单个字段中的原因是什么?

一种方法是使用 String 类型的字段,并将所有整数添加到逗号分隔列表中,并在 getter 和 setter 中连接/分解:

private String vals;

public setVals(int vals[])
{
     // this.vals = Iterate vals[] and create a comma separated string
}

public int[] getVals()
{
    // vals.split(",") to get a list of Strings, then typecast/parse them to ints before returning
}

使用批注和控制映射需要一个单独的表来存储值。@ElementCollection@CollectionTable

@ElementCollection
private Collection<Integer> integers;

http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection 上阅读有关元素集合的更多信息

类似的问题,JPA@ElementCollection注解是否总是产生一对多关系?


答案 2

您可以创建转换器并将其与注释一起使用@Converter。

此转换器必须实现 AttributeConverter,这是一个通用接口,具有两个方法 convertToDatabaseColumn 和 convertToEntityAttribute。

它很容易使用,你可以在这里检查:jpa独立自定义类型映射/ javax.persistence.x替代org.hibernate.annotations.Type和org.hibernate.annotations.TypeDef


推荐