2009-06-24 15 views
1

私は、hibernateと以下のエンティティを使用するWebアプリケーションを持っています。 私は何が間違っていますか?私はこれを使用すると双方向の休止状態の関係

... 
@Entity 
public class Registration implements BaseEntity { 
... 
@OneToMany(cascade = {CascadeType.PERSIST}, mappedBy = "registration", fetch = FetchType.EAGER) 
private List<OrderedProduct> orderedProducts = new ArrayList<OrderedProduct>(); 
... 
public List<OrderedProduct> getOrderedProducts() { 
    return orderedProducts; 
} 

public void setOrderedProducts(List<OrderedProduct> orderedProducts) { 
    this.orderedProducts = orderedProducts; 
} 
... 

... 
@Entity 
public class OrderedProduct implements BaseEntity { 
... 
@ManyToOne 
@JoinColumn(name = "registration_id",nullable = true) 
private Registration registration; 
... 
public Registration getRegistration() { 
    return registration; 
} 
public void setRegistration(Registration registration) { 
    this.registration = registration; 
} 
... 

、私は次のTomcatのエラーを取得:リストで

Caused by: org.hibernate.AnnotationException: Illegal use of mappedBy on both sides of the relationship: at.irian.conference.domain.Registration.orderedProducts 
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:193) 
    at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1325) 
    at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1164) 
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:602) 
    at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:543) 
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1163) 
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:329) 
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1148) 
    at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1226) 
    at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:173) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:854) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:425) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:131) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:221) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:251) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1288) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1257) 
    ... 86 more 
+0

あなたの関係はどのように見えますか? 登録[1] - > [0..n] OrderProductsで、双方向にマップしたいですか? – lud0h

+0

1件の登録には多くの注文商品=> 1:n – ddejmek

答えて

1

マッピングコレクションは、データベースにマッピングされた "シーケンス" 列を必要とします。あなたは、このコードが正しい設定

2

として使用する予定でしたが、私は

+5

があります。問題が解決しない場合は、この回答を受け入れる必要があります。 –

0

は注釈を使用した構文のを確認していない他の関係を削除するのを忘れています。このような関係を以下のように定義しました。

Registration.hbm.xml

<bag 
    name="orderedProducts" 
    inverse="true" 
    cascade="appropriate-one" 
> 
    <key> 
     <column name="REGISTRATION_ID" /> 
    </key> 
    <one-to-many 
     class="orderedProducts" 
    /> 
</bag> 

OrderedProducts.hbm.xml

<many-to-one 
    name="registration" 
    class="Registration" 
> 
    <column name="REGISTRATION_ID"/> 
</many-to-one> 
0

は、以下のようにのような注釈を試してみてください。あなたの問題を解決します。

@ManyToOne(fetch = FetchType.EAGER) 

@JoinColumn(name = "registration_id") 

public Registration getRegistration() { 
    return registration; 
} 

public void setRegistration(Registration registration) { 
    this.registration = registration; 
} 

@OneToMany(fetch = FetchType.EAGER, targetEntity = Registration.class, mappedBy = "registration", cascade = { CascadeType.ALL }) 
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 
@Fetch(FetchMode.SELECT) 
@JoinColumn(name = "registration_id")