使用休眠保存
Posted
技术标签:
【中文标题】使用休眠保存【英文标题】:Saving with hibernate 【发布时间】:2021-09-22 01:18:20 【问题描述】:我是 hibernate 的新手,正在尝试使用它。但是,我面临一个小问题。所以我有一种按摩应用程序,用户可以在这里互相发送消息。这是用户和按摩类:
@Entity(name = "userPojo")
public class User
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String firstName;
private String lastName;
@Column(unique = true)
private String username;
private String password;
@OneToMany(cascade = CascadeType.REMOVE)
@JoinTable(name = "user_messages")
@LazyCollection(LazyCollectionOption.FALSE)
private final List<Message> messages = new LinkedList<>();
// constructor and getters&setters
@Entity
public class Message
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int ID;
private String message;
private String dateTime;
@ManyToOne
private User sender;
// constructor and getters&setters
现在,如果消息的发件人想要删除他的一条消息,我将面临以下异常:
Caused by: org.postgresql.util.PSQLException: ERROR: update or delete on table "message" violates foreign key constraint "fkdqkq2exjkook6o3vx26kxnnya" on table "user_messages"
Detail: Key (id)=(2) is still referenced from table "user_messages".
感谢您帮助解决此错误
【问题讨论】:
还提供从数据库加载记录并执行删除的其余代码。另外,Message
不应该有两个用户(作者和收件人)吗?
实际上,每个用户拥有的消息列表是他们保存的消息。为了保留您正在谈论的数据,我有一个我不想在这里提及的现场聊天。问题是我必须先将消息保存到数据库然后用户@MartinDendis
【参考方案1】:
我相信您面临的是映射问题,您是说一条消息应该有多个用户而不是属于一个用户?尝试的一些替代方法是从 Message 中删除 ManyToOne 或使用“mappedBy”注释属性来指定此时未知的关系所有者(Message x User)。之后,从父集合中删除所需的项目 + 保存应该可以解决问题。
This tutorial may also shed some light
【讨论】:
以上是关于使用休眠保存的主要内容,如果未能解决你的问题,请参考以下文章