1

JPAとHibernate
を使用して、エンティティクラスがあります

@Entity
@Table(name = "ROLES")
public class Role implements Serializable 
{
       
   @Column
   private List<String> tubes;    

// another fields .setters, getters  
}  

リストチューブ内のすべての文字列は、別のテーブル(TUBES)からの1つの行です。

テーブルROLESは、TUBESとOneToManyの関係にあります。
Aは、別のエンティティチューブを作成し、エンティティチューブにテーブルTUBESをマップできます。しかし、どうすれば別のエンティティなしでこれを作成できますか?

編集:

作った

 @ElementCollection
 @CollectionTable(name = "TUBES", joinColumns = @JoinColumn(name = "role_id"))
 @Column(name = "tube")
 private ArrayList<String> tubes;  

JBossにデプロイします。そして実行時にSQLGrammarExceptionが発生します

JPAによって作成されるクエリは次のとおりです。

/ * SELECTrFROMロールrWHEREr.name =?* / select role0_.AA_ID as AA1_0_、role0_.ROLNAME as ROLNAME0_、role0_.role as PID4_0_ from PIDDB_PID_ROLE role0_ where role0_.ROLNAME =?
17:17:14,661エラー[JDBCExceptionReporter] ORA-00904: "ROLE0_"。"tube":無効な識別子

4

1 に答える 1

3

あなたは@ElementCollectionマッピングを使うことができます私はこれがあなたが探しているものだと思います。

@ElementCollection(fetch=FetchType.LAZY)
@CollectionTable(name="TUBES", joinColumns=@JoinColumn(name="role_id"))
@Column(name="tube")
private List<String> tubes;    

アップデート:

dependency>
  <groupId>org.hibernate.javax.persistence</groupId>
  <artifactId>hibernate-jpa-2.0-api</artifactId>
  <version>1.0.0.Final</version>
</dependency>

**Update2:**

import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;
于 2012-04-27T12:13:47.417 に答える