私は2つのエンティティにIDの注釈が付けられていますが、それらのIDはテーブルの主キーではありません。私はまだ変更の初期の影響を制限するためにPKのエンティティをエンティティにマッピングしています。しかし、多くの関係に多くを関連付けるためにPKのを使用して関連テーブルには、次のエラーがスローされます。Hibernate関連テーブル
java.lang.IllegalArgumentException: Provided id of the wrong type for class. Expected: class java.util.UUID, got class java.lang.Long
エンティティ@IdはUUIDですがロングであるテーブルのPKが@JoinColumn
としてマッピングされています関連エンティティ
@Embeddable
public class CustomerAccountId implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "user_id", nullable = false)
private Long customerId;
@Column(name = "account_id", nullable = false)
private Long accountId;
ための複合キー関連エンティティ:
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "customerId", column = @Column(name = "user_id", nullable = false)),
@AttributeOverride(name = "accountId", column = @Column(name = "account_id", nullable = false))
})
private CustomerAccountId id;
@ManyToOne
@JoinColumn(name = "user_id", insertable = false, updatable = false, referencedColumnName = "user_id")
private Customer customer;
@ManyToOne
@JoinColumn(name = "account_id", insertable = false, updatable = false, referencedColumnName = "id")
private Account account;
失敗エンティティ:
@Column(name = "user_id")
private Long serialId; // also the primary key in the table
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@org.hibernate.annotations.Type(type="pg-uuid")
@Column(name = "uid", updatable = false)
private UUID id;
これはでも可能であれば誰でも知っていますか?私はこの変更をプッシュすると、関連テーブルのコンテンツを強制的に更新するつもりですか?
セキュリティ上のリスクがあり、PKとしてUUIDを使用した場合のパフォーマンスが低下するのを避けるため、シリアルIDの列を公開したくはありません。シリアルIDはまだエンティティにマッピングされているため、私は作業を段階的に行うことができますが、エンティティIDであることは望ましくありません。 – peekay
もし私が正しく理解したら、IDの変更を許可したくないのですか? 参照http://stackoverflow.com/a/2217064/2710704 – Tokazio
私はもともとシーケンシャルIDをどこでも使用していました。今私はUUIDのに変換しているセキュリティ監査の後、私は潜在的なパフォーマンスの問題のためにPKのとしてUUIDを使用したくない。 – peekay