2016-05-11 30 views
0

現在、複合キーをプライマリキーとして持つCredentialオブジェクトのJPARepositoryインターフェイスを使用して、persistを実行しようとしています。 レポは次のとおりです。ブートJPAリポジトリsaveAndFlush複合キー

@Transactional public interface CredentialRepository extends JpaRepository<Credential,CredentialPK> {}

credentialPKは次のとおりです。

@Embeddable 
    public class CredentialPK implements Serializable { 

    @Column(name = "CREDENTIAL_ID") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer credentialID; 

    @Column(name = "CREDENTIAL_TYPE_ID") 
    private String credentialTypeID; 

    public CredentialPK() { 
    } 
    //getters and setters; 

} `

資格:サービスクラスで @Entity @Table(name = "TBL_CREDENTIALS") public class Credential { @EmbeddedId private CredentialPK credentialPK; //getters and setters }

、私が実行しようとしていますアプリケーションによって提供される資格証明タイプを使用した保存操作に。この例では、資格情報のタイプが「一時的」であるとします。次のように 証明書を作成し、永続化するためのコードがある:

 Credential credential = new Credential(); 
    CredentialPK pk = new CredentialPK(); 
    pk.setCredentialTypeID("temporary"); 
    credential.setCredentialPK(pk); 
    Credential temporaryCredential = credentialRepository.saveAndFlush(credential); 

    temporaryCredential.getCredentialPK().getCredentialID(); // returns null, even when repository is flushed 

`

IはtemporaryCredentialことを必要credentialIDが新たに挿入された信用証明書のID移入有します。しかし、私が取得しているcredentialIDはnullです。私は保存して両方saveAndFlush方法で、CrudRepository APIとリポジトリの実装のためのJpaRepository APIの両方を使用してみました。資格情報の主キーがコンポジットではないが、従来のコードのためにこの変更を行うことはできません。

提案がありますか?別の答えから

答えて

2

How to get auto generated value from composite primary key in hibernate

私は、ワールドワイドウェブサイト上のすべての可能なリンクの上にマウスを移動し、あなたが@EmbeddedIdまたは@IdClassと@GeneratedValue使用できない理由を見つけるためにしようとしている(すなわち、複合のPK)。その理由はあなただけができないということです。

コンポジットPKは、ジェネレーションベースではなく、ASSIGNMENTベースです。したがって、@GeneratedValueのものはそれらで動作するものではありません。私も私のプロジェクトで問題があります。他の方法はないと思っています。

あなたの@GeneratedValue IDがあなたのドメイン(例えばあなたのデータベース)の文脈で常に一意であることを知っていれば、複合PKとだからあなたのレコードの一意性

を決定するために、いくつかの内部チェックを持っているが、このポスターのようにあなたが@GeneratedValueを持っている、あなたは複合PKを必要としない場合には、生成された値が一意である、と述べました。 creditialIdcredentialTypeIdの組み合わせは、一意でない可能性はありません。これは、基本的に、IMHOというデザインを再考する必要があることを意味します。

+0

ありがとうございました!うまくいけば、今後のブートリリースでこれが可能になることを願っています。 –

関連する問題