以下の注釈は、フィールドにそれを適用するときに動作します:注釈に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つを予測します。
ありがとう、申し訳ありませんがコードを貼り付けたときに角括弧が消えました。私は実際にそれをやっている: – Mark
プライベートセット 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
プライベートセット 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