ON DELETE SET NULL UP UPDATE使用JPA设置NULL

时间:2011-08-25 06:04:37

标签: jpa ejb-3.0

如何在使用JPA创建表时添加 ON 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;

}

1 个答案:

答案 0 :(得分:0)

为此目的使用JPA模式生成器是一个坏主意。最好将DDL脚本手动编码并置于版本控制之下,以管理您的数据库。

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

此外,JPA架构生成器不太可能支持此功能。例如,Hibernate尚不支持此功能,并且已经引发了multiple feature requests,并且没有一个已经解决。 EclipseLink似乎也不支持此功能。