2011-07-12 18 views
0

以下の注釈は、フィールドにそれを適用するときに動作します:注釈にHibernate 3.5

@OneToMany(targetEntity=TestMany.class, 
      cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
      @JoinColumn(name="TESTID") 

private Set<TestMany> testManys = new HashSet<TestMany>(); 

しかし、私は以下のゲッターの上に配置したときに失敗します。

public Set<TestMany> getTestManys() { 
    return testManys; 
} 

次のエラーで:

Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: TEST, for columns: [org.hibernate.mapping.Column(testManys)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:291) 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:275) 
    at org.hibernate.mapping.Property.isValid(Property.java:217) 
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464) 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:236) 
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1193) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1378) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:860) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:779) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 
    ... 47 more 

関係の多くの側:

@SuppressWarnings("serial") 
@Entity 
@Table(name="TESTMANY") 
public class TestMany extends BaseEntityImpl{ 

@ManyToOne 
@JoinColumn(name="TESTID", insertable=false, updatable=false) 
private Test test; 

なぜ私はそれがゲッターではなくプロパティで動作するのか分かりません。テーブルは上手く、注釈は私にはうまく見えます。非常に明白な何かが欠けていますか?それはバージョンの問題かもしれませんか?

あり、基本的な基底クラスがあるが、私は、これはそれを行うには何を持っていると思ういけない:

@MappedSuperclass 
public abstract class BaseEntityImpl implements BaseEntity, Serializable { 

    private static final long serialVersionUID = 7887314289537L; 

    @Id @GeneratedValue(strategy = AUTO) 
    @Column(name = "ID") 
    private Long id; 

    public Long getId() { 
     return id; 
    } 

    @SuppressWarnings("unused") 
    private void setId(Long id) { 
     this.id = id; 
    } 
} 

私は休止状態-coomons-のバージョン3.5.3-決勝と3.2.0.Finalを使用しています注釈。

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.5.3-Final version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.5.3-Final <version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.2.0.Final</version> 
    </dependency> 

誰もが似たようなアイデアを持っているのですか?私は人生の2.5時間をこの問題を解決しようと過ごしました。私はもう1つを予測します。

答えて

0

私は今解決していません(残念なことに、数百万ギガバイトRAM、そう何Hibernateはここで起動していない)が、docが示すように、あなたのセットは、タイプを必要とし、その代わりに:

使用
@OneToMany(targetEntity=TestMany.class, cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
@JoinColumn(name="TESTID") 
private Set testManys = new HashSet(); 

を:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
@JoinColumn(name="TESTID") 
private Set<TestMany> testManys = new HashSet(); 

、それはトリックを行う必要があります。あなたがHibernateのドキュメントが気に入らない場合は、thisと読むことができます。

+0

ありがとう、申し訳ありませんがコードを貼り付けたときに角括弧が消えました。私は実際にそれをやっている: – Mark

+0

プライベートセット testManys =新しいHashSet (); @OneToMany(targetEntity = TestMany.class、 \t \t \tカスケード= CascadeType.ALL、フェッチ= FetchType.EAGER) \t \t \t @JoinColumn(名前は= "テストID") \t公衆セット getTestManys(){ \t \t return testManys; \t} – Mark

+0

プライベートセット testManys =新しいHashSet (); @OneToMany(targetEntity = TestMany.class、 \t \t \tカスケード= CascadeType.ALLは、= FetchTypeをフェッチします。 \t \t \t @JoinColumn(名= "テストID") \t公衆セット getTestManys(){ \t \t戻りtestManys)EAGER。 \t} – Mark

関連する問題