2012-08-11 109 views
2

我正在使用CascadeType.MERGE,但生成的SQL在外键中不包含任何ON UPDATE。这里是我的代码在JPA(eclipselink)中创建外键ON UPDATE CASCADE

@Entity 
public class Address { 
    @Id 
    private int id; 

    private String address; 
} 

@Entity 
public class Employee { 
    @Id 
    private int empId; 

    @OneToOne(cascade = CascadeType.MERGE) 
    private Address address; 
} 

,请问有什么在这里失踪

回答

1

CascadeType.MERGE是JPA结构,它告诉你时所说的合并对员工也呼吁引用地址合并提供商。

ON UPDATE CASCADE是一个数据库设置,似乎与CascadeType.merge没有任何关系。如果引用的主键更改,它会导致数据库更新外键。由于不允许更改JPA中的主键,因此此设置没有意义。如果您有可能需要更改的自然pk,建议您使用唯一标识符的排序。

+0

我一直在试图找到它说的主键不能在JPA规范中更改。你有参考吗? – Namphibian 2012-09-17 12:43:52

+0

这个[link](http://stackoverflow.com/a/2217064/2499238)中的答案引用了JPA规范。 – 2015-01-05 18:26:12