2017-10-09 6 views
0

@EntityCrudRepositoryを使用してMySQLデータベースにエントリを作成していますが、@ GeneratedValue(strategy = GenerationType.AUTO)が実行されて自動インクリメントを生成する場所が不思議でした値?hibernateで@GenerateValueを実行すると

@Entity 
    @Table(name = "all_contacts") 
    public class Contact { 

     //Ideally this would be set as foreign key to application's user schema 
     private long userId; 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="contactid") 
     private long contactId; 

     @NotNull 
     private String name; 

    //getters and setters 

    } 

//

public interface ContactRepository extends CrudRepository<Contact, Long> { } 

私はそのゲッターを通じてcontactIdの値にアクセスしたいので、私は聞いて、私はContactRepository.save()が呼び出されるまで待たなければならないのですか?

答えて

1

SQL INSERTステートメントを実行する前に、そのエンティティの新しい割り当て済みIDを知ることはできません。

はい、あなたはContactRepository.save()またはSQL INSERT文をトリガーするコマンドを実行してからそのIDを取得する必要があります。しかし、常にIDを返すことが保証されているので、saveはより優れています。

0

SQL挿入文が実行されると、生成された値が取得されます。値がsave()の前にassingされていることはわかりません。 GenerationType.AUTO番号ジェネレータは、エンティティオブジェクトの自動オブジェクトIDを生成し、この生成された数値が主キーフィールドに使用されます。

@Entity 
public class Entity { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) int id; 

} 
関連する問題