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列を分割)?