5

Let I have Tables (Books と Authors には ManyToMany 関係があります)

BOOKS
id
book_name

AUTHORS
id
author_name

BOOKS_AUTHORS
ID
book_id
author_id

このテーブルをエンティティにマッピングします

class Books  
{  
   @Id  
   long id;  

  @Column(name = "author_name")
   String name;


   @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinTable(name = "BOOKS_AUTHORS", 
              joinColumns = @JoinColumn(name = "book_id"),
              inverseJoinColumns = @JoinColumn(name = "author_id"))  
   List<Authots> authors;  

// setter, getters, adder  
}  

class Authors  
{  
   @Id  
   long id;  

   @Column(name = "author_name")
   String name;

   @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinTable(name = "BOOKS_AUTHORS", 
              joinColumns = @JoinColumn(name = "author_id"),
              inverseJoinColumns = @JoinColumn(name = "book_id"))  
   List<Books> books;  

// setter, getters, adder  
}  

さて、次をやってみる

public void addAuthor(final String bookName, final Author author)
{  
      final Book book = // get book from database by bookName
      if (book == null)
         throw new DataNotFoundException("Book not found :(");
      author.addBook(book);
      book.addAuthor(author);  
      entityManager.persist(author);  
}  

1) BOOKS_AUTHORS レコードの ID は NULL であってはならないという例外
が発生する 2) リレーションシップ テーブル BOOKS_AUTHORS の ID (イジング シーケンス ジェネレーター) を生成する方法

4

4 に答える 4

12

@ManyToManyid フィールドを含む結合テーブルの作成には使用できません。

結合テーブルの id フィールドが必要な場合は、そのテーブル用に特別なエンティティ クラス ( など) を作成し、 /関係BookAuthorを使用して本や著者に接続する必要があります。@ManyToOne@OneToMany

それ以外の場合は、テーブルから id フィールドを削除する必要がありBOOKS_AUTHORSます。

于 2012-05-04T09:22:24.807 に答える
1
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;

books_authorsHibernateを使用してマップされていない場合は、データベース側の自動IDインクリメンターを使用します。例:

ALTER table book_authors CHANGE id long NOT NULL AUTO_INCREMENT;
于 2012-05-04T09:19:44.190 に答える
0

プロジェクションを使ってみてください

                  session.CreateCriteria(typeof (BOOKS_AUTHORS))
                           .SetProjection(Projections.Max("Id"))
                           .UniqueResult()

それに+1を追加します:)Javaに精通していないその.netコードがあなたを助けることを願っています。

于 2012-05-04T09:27:47.560 に答える