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 列に問題があるようです - ID 値は作成されません。さらに、更新しようとすると、「DUPLICATE PRIMARY KEY」エラーが発生します。

JPAとHibernateを使用してこれを成功させた人はいますか(IDENTITY列とPRIMARY KEY列を分割)?

4

1 に答える 1

0

短い答えは「いいえ - これはうまくいきません」です。論理的には、主キーの一部として以外に IDENTITY 列を使用する理由はなく、この実装は JPA ではまったく機能しません (少なくとも、私はそれを機能させることができませんでした.

簡単に言えば:避ける。

于 2013-07-30T20:26:51.140 に答える