在使用JPA更新集NULL时删除集NULL

在使用JPA更新集NULL时删除集NULL,jpa,ejb-3.0,Jpa,Ejb 3.0,在使用JPA创建表时,如何在DELETE SET NULL ON UPDATE SET NULL上添加约束。在实体定义下面 桌子 CREATE TABLE `node` ( `id` bigint(20) NOT NULL, `parentNode_id` bigint(20) default NULL, PRIMARY KEY (`id`), KEY `FK1EC1DD0F28AB6BA5` (`parentNode_id`), CONSTRAINT `FK1EC1D

在使用JPA创建表时,如何在DELETE SET NULL ON UPDATE SET NULL上添加约束。在实体定义下面

桌子

CREATE TABLE `node` (
  `id` bigint(20) NOT NULL,
  `parentNode_id` bigint(20) default NULL,
  PRIMARY KEY  (`id`),
  KEY `FK1EC1DD0F28AB6BA5` (`parentNode_id`),  
  CONSTRAINT `FK1EC1DD0F28AB6BA5` FOREIGN KEY (`parentNode_id`) REFERENCES `node` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



@Entity
public class Node {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "NodeSequence")
    private long id;

    @ManyToOne(cascade=CascadeType.REMOVE)
    @JoinColumn(name = "parentNode_id", nullable = true)
    protected Node parentNode = null;

}

为此目的使用JPA模式生成器不是一个好主意。为了管理数据库,几乎总是最好使用手工编码并置于版本控制下的DDL脚本

此外,通过数据库约束将外键值设置为null,只会导致持久性上下文具有脏值,除非JPA提供程序知道数据库中的外键约束,并有意识地将持久性上下文中的相应值更新为null

此外,JPA模式生成器不太可能支持此功能。例如,Hibernate还不支持这一点,已经提出了一些问题,但没有一个问题得到解决。EclipseLink似乎也不支持此功能