hee*_*eez 6 java hibernate jpa
我问的问题很简单,但似乎不可能找到答案。我正在使用 Spring Data JPA,并且有一个 JDBC/JPA DataSource(这是 PostgreSQL,但这并不重要),它预加载了数据,我只是尝试从中读取数据。
如何构建 POJO 以便拥有List<String>不需要额外连接表的字段?这是我的一个示例实体类:
@Entity
@Table(name = "pojo", schema = "pojoschema")
public class POJO {
@Id
@Column(name = "id", columnDefinition = "uuid")
private String id;
@Column(name = "a_string", columnDefinition = "text")
private String aString;
@Column(name = "strings", columnDefinition = "text[]")
@ElementCollection
private List<String> strings;
// getters/setters
}
Run Code Online (Sandbox Code Playgroud)
这样做我得到一个org.postgresql.util.PSQLException: ERROR: relation "pojo_strings" does not exist.
为什么hibernate认为String我想要的s在另一个表中?我该如何解决这个问题?我只是想通过 JPA 将 PostgreSQLtext[]列映射回List<String>POJO 中的 a 。
这些情况下的方法是使用 jpa,AttributeConverter如下所示:
@Converter
public class StringToListConverter implements AttributeConverter<List<String>, String> {
@Override
public String convertToDatabaseColumn(List<String> list) {
if(list == null) return "";
return String.join(",", list);
}
@Override
public List<String> convertToEntityAttribute(String joined) {
if(joined == null) return new ArrayList<>();
return new ArrayList<>(Arrays.asList(joined.split(",")));
}
}
Run Code Online (Sandbox Code Playgroud)
Converter并在实体字段中使用注释:
@Entity
@Table(name = "pojo", schema = "pojoschema")
public class POJO {
@Id
@Column(name = "id", columnDefinition = "uuid")
private String id;
@Column(name = "a_string", columnDefinition = "text")
private String aString;
@Column(name = "strings")
@Convert(converter = StringToListConverter.class)
private List<String> strings;
// getters/setters
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8815 次 |
| 最近记录: |