2014-04-06 49 views
0
@Embeddable 
    public class WeaverPagarDetails{ 
    @JoinColumn(name = "qualityId") 
      private FabricQualityDetailsForm quality; 
      private int totalTaka; 
      private double totalMeters; 
      private double ratePerTaka; 
      private double pagarAmount; 

    public FabricQualityDetailsForm getQuality() { 
      return quality; 
    } 

    public void setQuality(FabricQualityDetailsForm quality) { 
      this.quality = quality; 
    } 

....org.hibernate.MappingException:无法确定类型:

@Entity 
    @Table (name="WEAVER_PAGAR") 
    public class WeeklyWeaverPagarForm { 

     @Id @GeneratedValue(strategy = GenerationType.AUTO) 
private int pagarId; 
@Temporal(javax.persistence.TemporalType.DATE) 
private Date fromDate; 
@Temporal(javax.persistence.TemporalType.DATE) 
private Date toDate; 

@OneToOne 
@JoinColumn(name = "weaverId") 
private WeaverDetailsForm weaver; 

@ElementCollection 
@JoinTable(name="TAKA_DETAILS") 
@GenericGenerator(name="hilo.gen" ,strategy="hilo") 
@CollectionId(columns={@Column(name="ID")},generator="hilo.gen", [email protected](type="long")) 
private Collection<WeaverPagarDetails> takaDetails = new ArrayList(); 

... ..

我得到的错误是:

org.hibernate.MappingException: Could not determine type for: textileautomate.java.form.FabricQualityDetailsForm, at table: TAKA_DETAILS, for columns: [org.hibernate.mapping.Column(quality)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:314) 
    at org.hibernate.tuple.PropertyFactory.buildStandardProperty(PropertyFactory.java:240) 
    at org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:70) 
    at org.hibernate.mapping.Component.getType(Component.java:172) 
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:292) 
    at org.hibernate.mapping.Collection.validate(Collection.java:313) 
    at org.hibernate.mapping.IdentifierCollection.validate(IdentifierCollection.java:68) 
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1331) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1789) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1868) 
    at textileautomate.java.actions.SessionFactoryGen.getInstance(SessionFactoryGen.java:25) 
    at textileautomate.java.actions.WeaverActions.<init>(WeaverActions.java:29) 
    at textileautomate.java.begin.TextileFrame.initCompData(TextileFrame.java:73) 
    at textileautomate.java.begin.TextileFrame.<init>(TextileFrame.java:43) 
    at textileautomate.java.begin.TextileFrame$19.run(TextileFrame.java:1392) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:688) 
    at java.awt.EventQueue$3.run(EventQueue.java:686) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:697) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

我是新来的hibernate,不知道annotation @JoinColumn是否可以在@Embeddable类中使用。

回答

0

看来你缺少hibernate和javax.persistence注释。

org.hibernate.mapping.Column应该是javax.persistence.Column,请检查您的代码的导入部分。

回答你的问题JoinColumn可以在嵌入的答案是肯定的,但JoinColumn通常使用的关系注解,例如可以使用:OneToOne多对一,但是你回到这个问题,是的,你可以在一个可嵌入的关系。

UPDATE

@ElementCollection 
@JoinTable(name="TAKA_DETAILS") 
@GenericGenerator(name="hilo.gen" ,strategy="hilo") 
@CollectionId(columns={@Column(name="ID")},generator="hilo.gen", [email protected](type="long")) 
private Collection<WeaverPagarDetails> takaDetails = new ArrayList(); 

应该

@ElementCollection 
@CollectionTable(name="TAKA_DETAILS") 
@GenericGenerator(name="hilo.gen" ,strategy="hilo") 
@CollectionId(columns={@Column(name="ID")},generator="hilo.gen", [email protected](type="long")) 
private Collection<WeaverPagarDetails> takaDetails = new ArrayList<WeaverPagarDetails>(); 
当您使用

@ElementCollection你应该使用@CollectionTable@JoinTable,尝试。

+0

谢谢@koitoer – akash

+0

我有检查导入部分和正在使用javax.persistence.Column。我还没有找出原因。 – akash

+0

请参阅我的更新 – Koitoer

相关问题