gpt4 book ai didi

java - Hibernate 在插入子对象时插入重复的父对象

转载 作者:行者123 更新时间:2023-11-30 10:26:37 27 4
gpt4 key购买 nike

我的数据库中已经存在父记录。我正在尝试添加一个 child 并将其关联到该 parent 。他们共享同一个类(class)。当我尝试添加 child 时,它会重新制作父实体。似乎 Hibernate 错误地认为我正在成为新 parent 。它是一个 Hibernate 标签还是可能有一些东西是按值而不是引用传递的?

实体定义

@Id
@GeneratedValue(generator="entitySequence", strategy=GenerationType.AUTO)
@SequenceGenerator(name="entitySequence", initialValue=1,
sequenceName="entity_sequence", schema="user_portal")
private Long id;

...


@ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST,
CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="parent_id", referencedColumnName="id")
@JsonBackReference
private Entity parentEntity;


@OneToMany(mappedBy="parentEntity", fetch=FetchType.LAZY,
targetEntity=Entity.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JsonManagedReference
private List<Entity> childEntities;

Controller 代码

@RequestMapping(
value = "/add",
method = RequestMethod.POST,
headers = HTTP_ACCEPT_JSON_HEADER,
produces = HTTP_RESPONSE_JSON_HEADER)
public @ResponseBody WebResponse addEntity(@RequestBody Entity s) {
WebResponse wr = new WebDataResponse();

try {
s = EntityService.saveEntity(s);

if (s != null) {
handleSuccess(wr, s, 1);
} else {
handleSuccess(wr, null, "Error adding Entity.", 0);
}

} catch (Exception ex) {
handleException(wr, ex);
}

return wr;
}

服务代码

@Override
@Transactional
public Entity saveEntity(Entity s) {

String entityNumber = s.getEntityNumber();
boolean isAddendum = StringUtils.countOccurrencesOf(entityNumber, "-") == 4;


if(isAddendum) {
Entity parent = getEntityByNumber(entityNumber.substring(0,entityNumber.lastIndexOf("-")));
if(parent !=null) {
s.setParentEntity(parent);
}else {
return null;
}
}

s.setCreatedBy("admin");
s.setCreatedDate(new Date());

s = entityRepository.save(s);

return s;
}

@Override
@Transactional(readOnly = true)
public Entity getEntityByNumber(String entityNum) {
Entity s = entityRepository
.findByEntityNumber(entityNum);

return s;
}

非常感谢任何帮助!谢谢!

最佳答案

从我的 parentEntity 中删除 CascadeType.PERSIST 解决了这个问题。

我还建议不要手动插入测试变量。使用像 Postman 这样的应用程序进行 API 测试调用要好得多。这让我对如何解决问题有了更好的了解(我收到的是一个错误,而不是这个重复问题)。

关于java - Hibernate 在插入子对象时插入重复的父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45636562/

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