0

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

@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 列)?

4

1 回答 1

0

简短的回答是“不——这行不通”。从逻辑上讲,除了作为主键的一部分之外,没有理由使用 IDENTITY 列,而且这种实现在 JPA 中根本不起作用(至少,我无法让它工作。

简而言之:避免。

于 2013-07-30T20:26:51.140 回答