这个JPA策略会起作用吗?

时间:2013-07-24 19:43:47

标签: java database spring hibernate jpa

我正在尝试使用以下设计来使用Spring Data,Hibernate,JPA框架。请注意,@ GeneratedValue和@Id annoations位于不同的列上。

@Data
@Entity
@Table(name = "ACCTS")
public class MyAccount implements java.io.Serializable {


    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="ACCOUNT_ID", nullable=false, precision=10, scale=0)
    private long accountId;

    @Id
    @Column(name="ACCOUNT_NUMBER", unique=true, nullable=false, precision=9, scale=0)
    private int accountNumber1;

    @Column(name="PRIMARY_NUMBER", nullable=false, precision=9, scale=0)
    private int accountNumber2;

}

表格如下所示。请注意,PRIMARY KEY约束不在IDENTITY列上。

CREATE TABLE CAACCTS (
    ACCOUNT_ID BIGINT  GENERATED BY DEFAULT AS IDENTITY ,
    ACCOUNT_NUMBER DECIMAL(9, 0) DEFAULT 0 NOT NULL ,
    PRIMARY_NUMBER DECIMAL(9, 0) DEFAULT 0 NOT NULL ,
    CONSTRAINT XXX PRIMARY KEY( ACCOUNT_NUMBER ) ) ;

可以创建此表,但JPA似乎在IDENTITY列上遇到问题 - 永远不会创建标识值。此外,如果我尝试进行更新,我会收到“DUPLICATE PRIMARY KEY”错误。

有没有人用JPA和Hibernate成功完成了这项工作(拆分IDENTITY和PRIMARY KEY列)?

1 个答案:

答案 0 :(得分:0)

简短的回答是"否 - 这不起作用。"从逻辑上讲,没有理由使用IDENTITY列,除非作为主键的一部分,并且此实现在JPA中根本不起作用(至少,我无法使其工作。

简而言之:避免。