HIbernate映射exception:PropertyNotFoundException:找不到setter

我有两个POJO,STOCK和STOCK_DETAILS(一对多的关系)。 我还有一个接口IAUDITLOG(有两种方法)。 我需要用BOTH POJO实现这个接口,并希望在这些方法中编写一些实现。 但是当我用子类“STOCKDETAILS”实现IAUDITLOG接口时,它会给出exception“你应该有setter属性”

股票类别:

@Entity @Table(name = "stock") public class Stock implements java.io.Serializable, IAuditLog { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Integer stockId; @Column(name = "STOCK_CODE") private String stockCode; @Column(name = "STOCK_NAME") private String stockName; @OneToMany( fetch = FetchType.LAZY, mappedBy = "stock") public Set stockDetails = new HashSet(0); public Set getStockDetails() { return stockDetails; } public void setStockDetails(Set stockDetails) { this.stockDetails = stockDetails; } public Integer getStockId() { return stockId; } public void setStockId(Integer stockId) { this.stockId = stockId; } public String getStockCode() { return stockCode; } public void setStockCode(String stockCode) { this.stockCode = stockCode; } public String getStockName() { return stockName; } public void setStockName(String stockName) { this.stockName = stockName; } // overridded methods of IAUDITLOG interface public int getLogId() { return stockId; } public String getLogDetail() { return "some implementaion"; } } 

库存详情类

 @Entity @Table(name = "StockDetail") public class StockDetail implements Serializable, IAuditLog { /** * */ private static final long serialVersionUID = 1L; private Integer recordId; private Stock stock; private Float priceOpen; @Id @GeneratedValue @Column(name = "RECORD_ID", unique = true, nullable = false) public Integer getRecordId() { return this.recordId; } public void setRecordId(Integer recordId) { this.recordId = recordId; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "STOCK_ID", nullable = false) public Stock getStock() { return this.stock; } public void setStock(Stock stock) { this.stock = stock; } @Column(name = "PRICE_OPEN", precision = 6) public Float getPriceOpen() { return this.priceOpen; } public void setPriceOpen(Float priceOpen) { this.priceOpen = priceOpen; } //overriddded methods of IADUTILOG inteface public int getLogId() { // TODO Auto-generated method stub return 0; } public String getLogDetail() { // TODO Auto-generated method stub return "some implementation"; } } 

IAUDITLOg界面:

 public interface IAuditLog { public int getLogId(); public String getLogDetail(); } 

堆栈跟踪:

 Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:185) at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135) at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:385) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798) at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509) ... 46 more Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:138) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:188) at org.hibernate.tuple.entity.EntityMetamodel.(EntityMetamodel.java:341) at org.hibernate.persister.entity.AbstractEntityPersister.(AbstractEntityPersister.java:507) at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:146) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163) ... 55 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:135) ... 64 more Caused by: org.hibernate.PropertyNotFoundException: Could not find a setter for property logDetail in class com.auditLog.common.StockDetail at org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:252) at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:245) at org.hibernate.mapping.Property.getSetter(Property.java:326) at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:444) at org.hibernate.tuple.entity.AbstractEntityTuplizer.(AbstractEntityTuplizer.java:201) at org.hibernate.tuple.entity.PojoEntityTuplizer.(PojoEntityTuplizer.java:82) ... 69 more Feb 26, 2014 10:17:08 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Allocate exception for servlet dispatcher org.hibernate.PropertyNotFoundException: Could not find a setter for property logDetail in class com.auditLog.common.StockDetail at org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:252) at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:245) at org.hibernate.mapping.Property.getSetter(Property.java:326) at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:444) at org.hibernate.tuple.entity.AbstractEntityTuplizer.(AbstractEntityTuplizer.java:201) at org.hibernate.tuple.entity.PojoEntityTuplizer.(PojoEntityTuplizer.java:82) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:135) at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:188) at org.hibernate.tuple.entity.EntityMetamodel.(EntityMetamodel.java:341) at org.hibernate.persister.entity.AbstractEntityPersister.(AbstractEntityPersister.java:507) at org.hibernate.persister.entity.SingleTableEntityPersister.(SingleTableEntityPersister.java:146) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

请问任何人请让我知道,可能是什么问题??? 为什么我应该为那些非ACTUALLY属于该类的属性创建getter和setter,而是从其他一些接口实现。 仅供参考…当我使用Parent类“STOCK”实现此接口时,这很好用

您应该使用@Transient注释重写的方法。

http://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html

此批注指定属性或字段不是持久的。 它用于注释实体类,映射的超类或可嵌入类的属性或字段。

Ps从Hibernate 3开始,默认情况下是懒惰的,所以不需要将它显式标记为懒惰。

对于其他遇到此问题并且上述解决方案无效的人,我的错误是我的setter的名称不正确; 它与它设置的属性不匹配。 就这样