2016-09-08 13 views
2

いくつかの前提条件:永続化、Hibernate、Springデータの前に生成されたエンティティIDを取得する

Oracle DBシーケンスジェネレータを使用していません。その代わりに、私はHibernateシーケンスジェネレータe.xに依存します。私が欲しいもの

@Entity 
@Table(name = "JPA_ENTITY_A") 
@GenericGenerator(name = "system-uuid", strategy = "uuid2") 
public class JpaEntityA{ 
    @Id 
    @Type(type = "uuid-binary") 
    @GeneratedValue(generator = "system-uuid") 
    private UUID id; 
    @Column(name="NAME_WITH_ID") 
    String nameWithGeneratedId; 
} 

はコラム「NAME_WITH_ID」に次の生成された値を保持することです:this.nameWithGeneratedId+this.id

は、次の操作を実行することが可能である:

public String getNameWithGeneratedId(){ 
    return this.nameWithGeneratedId+this.id;//hope that the returned value will be persisted 
} 

それとも、取得することが可能です事前にエンティティをDBに生成されたIDに永続化する前に?はいの場合、どのように達成できますか? (下のコメントに基づいて行うことはできません)

Thxを事前に入力してください。

+0

多くの他のJPAプロバイダは、 '@ PrePersist 'の間に生成された値を利用できるようにしているので、実際のINSERTの前にアクセスすることができます。明らかに、Hibernateはこれをしません。 JPAで発行されたこの問題を次の仕様の一部にするために参照してください。https://java.net/jira/browse/JPA_SPEC-133 –

答えて

1

できません。永続化するという行為はIDを作成するものです。

+1

しかし、エンティティを保存するには、事前に一意のIDを生成する必要があります。 –

+0

@ mr.M Hibernateは、アプリケーションのインスタンスを1つしか操作していないとみなすことはできず、作成(および一意性の保証)をデータベースと調整する必要があります。 – chrylis

+0

更新された質問をご覧ください –

関連する問題