2011-08-25 98 views
0

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

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; 

} 

回答

0

这是一个坏主意,使用JPA模式发生器用于这一目的。拥有手动编码并置于版本控制之下的DDL脚本来管理数据库几乎总是可取的。

而且,设置外键值通过数据库约束为空,只会造成有值的持久化上下文,除非JPA提供商知道在数据库中的外键约束,自觉更新相应的值在持久化上下文中为null。

此外,JPA模式生成器不太可能支持此功能。例如,Hibernate目前还不支持这个功能,并且已经提出了multiplefeaturerequests,并且它们都没有解决。 EclipseLink似乎也不支持此功能。