gpt4 book ai didi

java - Hibernate 更新子集合

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:48 24 4
gpt4 key购买 nike

我有一个父类“任务”,其中有子类“标签”。我希望标签名称(请参阅标签类)是唯一的,但是当我尝试保存父类时,正在创建一个新的子记录。如何消除重复的子记录。

这是我的代码

任务类别

    @Entity
@Table(name="tasks")
public class TaskDTO {

...
...

@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable( name = "task_tags",joinColumns = { @JoinColumn(name = "taskId") }, inverseJoinColumns = { @JoinColumn(name = "tagId") })
private List<TagDTO> tags = new ArrayList<TagDTO>();


}

标签类

@Entity
@Table(name="tags")
public class TagDTO {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "tagId")
private int tagId;

@Column(name = "tagName")
private String tagName;
}

TaskDAOImpl

@Repository("taskDAOImpl")
public class TaskDAOImpl implements TaskDAO {

@Override
public Integer saveTask(TaskDTO taskDTO) {
Integer identifier = null;
try {


Session session = sessionFactory.getCurrentSession();
session.beginTransaction();

..........
..........
identifier = (Integer) session.save(taskDTO);

return identifier;
} catch (Exception ex) {
logger.error("unable to save task ", ex);
}
return null;
}

当我保存标签时,我将其添加到我的数据库中。

mysql> select * from tags;
+-------+---------+
| tagId | tagName |
+-------+---------+
| 1 | java |
| 2 | java |
+-------+---------+
2 rows in set (0.00 sec)

mysql> select * from task_tags;
+--------+-------+
| taskId | tagId |
+--------+-------+
| 69 | 1 |
| 70 | 2 |
+--------+-------+
2 rows in set (0.00 sec)

我想删除保存了两次的 tagName。

但我想要这样的东西

mysql> select * from tags;
+-------+---------+
| tagId | tagName |
+-------+---------+
| 1 | java |
+-------+---------+
2 rows in set (0.00 sec)

mysql> select * from task_tags;
+--------+-------+
| taskId | tagId |
+--------+-------+
| 69 | 1 |
| 70 | 1 |
+--------+-------+
2 rows in set (0.00 sec)

请帮我解决这个问题。提前感谢大家。

最佳答案

您应该执行以下操作之一:- 要么删除设置以级联关系上的所有内容,单独保留标签,然后添加将标签分配给任务。- 使用而不是列出一个集合。它不应该允许您添加相同的标签两次(在标签上实现 equals 方法来检查名称)

关于java - Hibernate 更新子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765653/

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