gpt4 book ai didi

java - 将字符串属性映射到 JSONB

转载 作者:行者123 更新时间:2023-12-04 17:25:12 28 4
gpt4 key购买 nike

我一直在尝试使用 JPA 将我的字符串属性映射到 Postgresql 的 JSONB。我读过perfect article by Vlad Mihalcea很多次,也看到了类似问题的相关问题和问题。但我仍然有这个异常.

更糟糕的是 - 在我更改实体类并让他继承父类(super class)之前,类似问题中的所有这些建议都很有用。而现在情况是这样的:

  1. 如果 @TypeDef@Type 在我的子类中,效果很好
  2. 但是我想使用抽象层并为我的基本实体类设置注释,我在上面注意到了这一点,然后在那个异常之后对我说'你好!又是我'

我的层次结构非常简单,如下所示:

基础实体

@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
@MappedSuperclass
public abstract class AbstractServiceEntity implements Serializable {

private Integer id;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

子实体

@Entity
@Table(schema = "ref", name = "test_json_3")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class TestJson extends AbstractServiceEntity {

@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private String jsonProperty;

我的 table

create table ref.test_json_3
(
id serial primary key,
json_property jsonb
)

UPD我已使用 JPA native 查询成功插入记录,但我必须将查询解包到 hibernate 查询中。不确定这是管理将数据插入数据库的最方便的方法。我的问题很实际,我仍然需要你的帮助)下面的 native 查询示例。

带有结果的代码片段

@Repository
public class JpaTestRepository {

@PersistenceContext
private EntityManager entityManager;

@Transactional
public void insert(TestJson testJson) {
entityManager.createNativeQuery("INSERT INTO test_json_3 (json_property) VALUES (?)")
.unwrap(Query.class)
.setParameter(1, testJson.getJsonProperty(), JsonBinaryType.INSTANCE)
.executeUpdate();
}

最佳答案

终于找到了解决问题的方法。答案是 - 只需通过 getter 使用你的 @Column(columnDefinition = "jsonb")@Type(type = "jsonb" 而不是类属性。

实体定义

@Entity
@Table(schema = "ref", name = "test_json_3")
@NoArgsConstructor
@AllArgsConstructor
@Setter
public class TestJson extends AbstractServiceEntity {

private String jsonProperty;

@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
public String getJsonProperty() {
return jsonProperty;
}

关于java - 将字符串属性映射到 JSONB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63800038/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com