Hibernate(和JPA)不能直接MapPostgreSQL数组类型。See this question了解如果您确实需要保持数据库结构不变,如何继续。This thread有一个所需自定义类型的示例。 如果你可以改变你的模式,你可以让hibernate创建一个额外的表来处理集合List<Integer>。然后,根据您使用的Hibernate版本:
public class MyClass{
private Long id;
private String name;
private List<Integer> values;
@Id
// this is only if your id is really auto generated
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
public List<Integer> getValues() {
return values;
}
...
5条答案
按热度按时间8ulbf1ek1#
Hibernate(和JPA)不能直接MapPostgreSQL数组类型。See this question了解如果您确实需要保持数据库结构不变,如何继续。This thread有一个所需自定义类型的示例。
如果你可以改变你的模式,你可以让hibernate创建一个额外的表来处理集合
List<Integer>
。然后,根据您使用的Hibernate版本:@ElementCollection
@CollectionOfElements
ikfrs5lh2#
Hibernate只能Map基本类型。在hibernatejar包的org. hibernate.type文件夹下检查。int数组不是其中之一。因此,您必须编写一个可以实现UserType接口的自定义类型。
IntArrayUserType.class
当你查询MyClass实体时,你可以添加这样的东西:
rbpvctlc3#
Maven依赖
你需要做的第一件事是在项目
pom.xml
配置文件中设置以下Hypersistence Utils Maven依赖项:Maven ARRAY列
假设你的数据库中有这个表:
你想把它Map成这样:
StringArrayType
和IntArrayType
是Hypersistence Utils项目提供的类。测试时间
现在,当你插入几个实体时:
Hibernate将生成以下SQL语句:
nwsw7zdq4#
我从来没有把数组Map到休眠状态。我总是使用集合。所以,我稍微改变了你的类:
pjngdqdw5#
从Hibernate 6.1 Final开始,如果可能的话,基本数组和集合现在可以Map到数据库ARRAY类型,或者JSON/XML类型。
https://in.relation.to/2022/06/14/orm-61-final/