gpt4 book ai didi

java - JPA 不使用 Converter 类更新列

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

我正在使用 Converter 类将复杂类存储为 MySQL 中的 JSON 文本。当我添加一个新实体时,Converter 类按预期工作。但是,当我更新实体时,复杂类中的数据不会在数据库中更新,而是在内存中更新。 Lat 和 Long 等其他属性已更新。我在 convertToDatabaseColumn 方法中放置的断点在更新时没有触发。

项目等级

public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String city;
private String state;
private String country;
@Enumerated(EnumType.STRING)
private StatusType status;
private String street;
private double latitude;
private double longitude;
@Convert(converter=ProjectPropertyConverter.class)
private ProjectProperty property;
}

public class ProjectProperty {

private String description;
private List<String> projectImgs;
private Boolean hasImages;
}

属性转换器类

@Converter (autoApply=true)
public class ProjectPropertyConverter implements AttributeConverter<ProjectProperty, String> {

@Override
public String convertToDatabaseColumn(ProjectProperty prop) {
try {
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(prop);
return jsonString;
} catch (Exception e) {
System.out.print(e.toString());
return null;
}

}

@Override
public ProjectProperty convertToEntityAttribute(String jsonValue) {
try {
ObjectMapper mapper = new ObjectMapper();
ProjectProperty p = mapper.readValue(jsonValue, ProjectProperty.class);

if(p.getProjectImgs().isEmpty())
{
p.setHasImages(Boolean.FALSE);
}
else
{
p.setHasImages(Boolean.TRUE);
}
return p;
} catch (Exception e) {
System.out.print(e.toString());
return null;
}
}
}

更新数据库的方法

public void modifyEntity(Object entity, String query, HashMap params) {
try {
tx.begin();
em.flush();
tx.commit();

} catch (Exception e) {
e.toString();
}
}

最佳答案

我来这里寻找相同的答案。原来问题是 JPA 不知道你的对象是脏的。这是通过在这个复杂对象上实现 equals()/hashcode() 方法解决的。在您的示例中,为 ProjectProperty 实现 equals 和 hashcode

一旦完成,JPA 就能够通过这些方法识别底层对象是脏的并进行转换和持久化。

关于java - JPA 不使用 Converter 类更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011478/

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