私はエンティティを持っています
@Entity
public class Book {
@Id
@Column(name = "book_id")
@SequenceGenerator(name = "book_book_id_seq", sequenceName = "book_book_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "book_book_id_seq")
private Long id;
// getter, setter & other fields
}
スキーマ付き
CREATE TABLE book
(
book_id bigint NOT NULL DEFAULT nextval('book_book_id_seq'::regclass),
CONSTRAINT book_pkey PRIMARY KEY (book_id)
)
私が達成したいのは、データベースによって生成されたシーケンス/ ID を使用したい場合もありますが、データが別の場所で作成され、既存の (手動) ID で作成したい場合もあります。
CrudRepository
Spring Data JPA の方法 ( を使用) または JPA の方法 ( を使用)で id を手動で設定することはできませんがEntityManager
、ネイティブ クエリでは問題ありません。これはJPAの制限ですか?私の問題の回避策はありますか?
Book book01 = new Book();
bookRepo.save(book01); // Book with id 1 is created
Book book02 = new Book();
book02.setId(5555L);
bookRepo.save(book02); // Does not create book with id 5555, but 2
Query nativeQuery = entityManager.createNativeQuery("INSERT INTO book VALUES (6666);");
nativeQuery.executeUpdate(); // Book with id 6666 is created
Query nativeQuery02 = entityManager.createNativeQuery("INSERT INTO book DEFAULT VALUES;");
nativeQuery02.executeUpdate(); // Book with id 3 is created
PostgreSQL 9.4、Hibernate 5、および Java 8 を使用しています。