首页 > 解决方案 > 用休眠保存

问题描述

我是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".

感谢您帮助解决此错误

标签: javadatabasehibernate

解决方案


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

本教程也可能会有所启发


推荐阅读