【问题标题】: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

标签: java database hibernate


【解决方案1】:

我相信您面临的是映射问题,您是说一条消息应该有多个用户而不是属于一个用户?尝试的一些替代方法是从 Message 中删除 ManyToOne 或使用“mappedBy”注释属性来指定此时未知的关系所有者(Message x User)。之后,从父集合中删除所需的项目 + 保存应该可以解决问题。

This tutorial may also shed some light

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2011-09-29
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2012-08-09
    • 2012-12-06
    相关资源
    最近更新 更多