【问题标题】:Delete JPA object with @OneToMany relationship in Play! Framework在 Play 中删除具有 @OneToMany 关系的 JPA 对象!框架
【发布时间】:2012-02-10 21:49:12
【问题描述】:

我正在尝试删除 Play 中的一个对象!但我收到此错误:

PersistenceException occured : org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

我的猜测是我在里面声明的@OneToMany 关系有问题。不过,我不确定。这是我的实体的声明:

@Entity
public class JumpSession extends GenericModel{
public JumpSession()
{
    sessionUID = java.util.UUID.randomUUID().toString();
}
//***********JPA relationships
@Id
public String sessionUID;

@OneToMany(mappedBy="jumpSession")
public List<UserJump> userJumps;

@ManyToOne
public User jumpMaster;
//**********end JPA relationships

public String inspectorUID;
public String packDetailUID;
public String aadsn;
public String aadType;
public String dropzone;
public String jumpType;
public String sessionName;
@As("MM/dd/yyyy")
public Date createdOn;
@As("MM/dd/yyyy")
public Date jumpDate;
public String startNotes;
public String endNotes;
public String notes;
public String startTime;
public int status;
}

当我删除 JumpSession 时,我需要 UserJump 条目仅指向 null 而不是 JumpSession。这是我用来删除对象的简单代码:

JumpSession jumpSession = JumpSession.findById("blah");
jumpSession.delete();

编辑: UserJump的相关部分:

@Entity
public class UserJump extends Model{

@ManyToOne
public JumpSession jumpSession;
}

即使没有 JumpSession,UserJump 的许多其他部分仍然使其独一无二。有没有办法让jumpSession 引用成为null?

编辑: 我将就此提出一个新问题,因为我的问题已经改变。当前答案符合原始问题。

【问题讨论】:

  • UserJump 是什么样的? JumpSession 或 UserJump 类是否有任何其他限制? ConstraintViolationException 堆栈跟踪还有更多内容吗?

标签: jpa playframework persistence


【解决方案1】:

您的 userJumps 仍然有对 jumpSession 的引用。先删除userJumps即可解决问题。

如果出于某种原因您想保留 UserJumps,那么您需要从 userJumps 中删除对 j​​umpSession 的引用

【讨论】:

  • 但是有没有办法只允许在 UserJump 中使用 null 引用?
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2016-04-21
  • 2016-12-22
相关资源
最近更新 更多