首先,我有两个实体。
用户.java
@Entity
public class User {
@Id
private String username;
private String password;
@OneToMany(mappedBy = "to", cascade=CascadeType.PERSIST, orphanRemoval=true)
private ArrayList<Message> messages;
}
public void deleteMessage(Message message){
System.out.println(messages);
messages.remove(message);
System.out.println(messages);
}
消息.java
@Entity
public class Message {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private String id;
@ManyToOne
@NoGson
private User to;
}
ArrayList 消息包含该用户的消息,并且该列表中的每条消息都具有该用户的“收件人”字段。所有这些都正确地保留了下来。但是,当我运行 deleteMessage 方法时,第一个 sysout 正确给出了完整列表,而第二个 sysout 只给出了 null 而不是没有删除消息的列表。
我不知道它是否与 jpa 有关,或者我只是犯了一个愚蠢的错误,但我找不到 remove 方法只是删除整个 ArrayList 的原因。当我调用 deleteMessage 函数时,我还调用实体管理器的 remove 方法从数据库中删除消息。
更新
经过更多测试后,我注意到第二个 sysout 确实给出了正确的输出。所以问题不在于 ArrayList 中的 remove 方法。但是arraylist在执行以下方法后变为null。
public void deleteMessage(Message message) {
em.remove(message);
}
所以现在我知道这是一个 JPA 问题。