HIbernate映射异常:PropertyNotFoundException:无法找到setter [英] HIbernate Mapping Exception: PropertyNotFoundException: Could not find a setter

查看:121
本文介绍了HIbernate映射异常:PropertyNotFoundException:无法找到setter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个POJO,STOCK和STOCK_DETAILS(一对多关系)。
我也有一个接口IAUDITLOG(有两种方法)。我需要用BOTH POJO来实现这个接口,并且希望在这些方法中编写一些实现。但是当我使用子类STOCKDETAILS实现IAUDITLOG接口时,它会给出例外情况你应该拥有setter属性



STOCK CLASS:

  @Entity 
@Table(name =stock)
public class Stock实现java.io.Serializable,IAuditLog
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(可选= 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< StockDetail> stockDetails = new HashSet< StockDetail>(0);


public Set< StockDetail> getStockDetails(){
return stockDetails;
}

public void setStockDetails(Set< StockDetail> 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;
}

// IAUDITLOG接口的重写方法
public int getLogId(){

return stockId;
}
public String getLogDetail(){
returnsome implementaion;


$ / code $ / pre
$ b $ p

股价详情类别

  @Entity 
@Table(name =StockDetail)
public class StockDetail实现Serializable,IAuditLog {
/ **
*
* /
private static final long serialVersionUID = 1L;
私人整数recordId;
私人股票股票;
私人Float priceOpen;

$ b @Id
@GeneratedValue
@Column(name =RECORD_ID,unique = true,nullable = false)
public Integer getRecordId() {
返回this.recordId;
}

public void setRecordId(Integer recordId){
this.recordId = recordId;


@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name =STOCK_ID,nullable = false)
public Stock getStock(){
返回this.stock;
}

public void setStock(股票股票){
this.stock = stock;


@Column(name =PRICE_OPEN,precision = 6)
public Float getPriceOpen(){
return this.priceOpen;
}

public void setPriceOpen(Float priceOpen){
this.priceOpen = priceOpen;
}

// IADUTILOG接口的重写方法
public int getLogId(){
// TODO自动生成的方法存根
return 0;
}

public String getLogDetail(){
// TODO自动生成的方法存根
返回某些实现;
}
}

IAUDITLOg界面:

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

STACK TRACE:

 原因:org.hibernate.MappingException:无法获得org.hibernate.persister.entity.SingleTableEntityPersister的构造函数
位于org.hibernate.persister.internal.PersisterFactoryImpl.create (PersisterFactoryImpl.java:185)
。在org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)$ b $ LT b。在org.hibernate.internal.SessionFactoryImpl&;初始化>(SessionFactoryImpl。
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798)
org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373)
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
引起:org.hibernate.HibernateException:无法实例化默认的tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer ]在org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:138)

。在org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:188)
在org.hibernate.tuple.entity.EntityMetamodel。< init>(EntityMetamodel.java:341)
at org.hibernate.persister.entity.AbstractEntityPersister。< init>(AbstractEntityPersister.java:507)
在o rg.hibernate.persister.entity.SingleTableEntityPersister<初始化>(SingleTableEntityPersister.java:146)
。在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
。在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
引起:java.lang.reflect.InvocationTargetException $ b $ sun at sun.reflect .NativeConstructorAccessorImpl.newInstance0(本地方法)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在java.lang.reflect.Co
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:135)
... 64 more
由org.hibernate.tuple.eu提供的org.hibernate.tuple.entity(Constructor.java:526)org .hibernate.PropertyNotFoundException:在类com.auditLog.common.StockDetail
中找不到属性logDetail的setter。org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:252)
at org。 hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:245)
在org.hibernate.mapping.Property.getSetter(Property.java:326)
在org.hibernate.tuple.entity.PojoEntityTuplizer。 buildPropertySetter(PojoEntityTuplizer.java:444)LT
。在org.hibernate.tuple.entity.AbstractEntityTuplizer&;初始化>(AbstractEntityTuplizer.java:201)
。在org.hibernate.tuple.entity.PojoEntityTuplizer<。 ; init>(PojoEntityTuplizer.java:82)
... 69 more

2014年2月26日上午10点17分08秒org.apache.catalina.core.StandardWr apperValve调用
SEVERE:分配servlet调度器的异常
org.hibernate.PropertyNotFoundException:无法在类com.auditLog.common.StockDetail中找到属性logDetail的setter 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)在org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:444 LT

。在org.hibernate.tuple.entity.AbstractEntityTuplizer&; INIT>(AbstractEntityTuplizer.java: 201)
at org.hibernate.tuple.entity.PojoEntityTuplizer。< init>(PojoEntityTuplizer.java:82)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun .reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.ref lect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
在java.lang.reflect.Constructor.newInstance(Constructor.java:526)
在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。< init>(EntityMetamodel .java:341)
at org.hibernate.persister.entity.AbstractEntityPersister。< init>(AbstractEntityPersister.java:507)
at org.hibernate.persister.entity.SingleTableEntityPersister。< init> (SingleTableEntityPersister.java:146)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

可以任何人请让我知道,可能是什么问题?为什么我应该为那些不属于该类的属性创建getter和setter,而是从其他接口实现。
FYI ...当我使用Parent类STOCK实现这个接口时,这工作正常

解决方案

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



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


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

P.s。因为Hibernate 3默认情况下是懒惰的,所以不需要明确标记为懒惰。


I have two POJO's ,STOCK and STOCK_DETAILS (one to many relationship). Also I have one interface IAUDITLOG (having two methods). I need to implement this interface with BOTH POJO's and want to write some implementation within those methods. But when I implement IAUDITLOG interface with child class "STOCKDETAILS" then it gives exception "that you should have setter property"

STOCK CLASS:

@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<StockDetail> stockDetails = new HashSet<StockDetail>(0);


    public Set<StockDetail> getStockDetails() {
        return stockDetails;
    }

    public void setStockDetails(Set<StockDetail> 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";
    }
}

STOCK DETAILS CLASS

@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 interface:

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

STACK TRACE:

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.<init>(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.<init>(EntityMetamodel.java:341)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:507)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(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.<init>(AbstractEntityTuplizer.java:201)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(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.<init>(AbstractEntityTuplizer.java:201)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(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.<init>(EntityMetamodel.java:341)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:507)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:146)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

CAN ANYONE PLEASE LET ME KNOW,what could be the problem??? Why should I create getter and setter for those properties which is not ACTUALLY belongs to that class, but implemented from some other interface. FYI... this works fine when I implement this interface with Parent class "STOCK"

解决方案

You should annotate the overridden methods with @Transient.

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

This annotation specifies that the property or field is not persistent. It is used to annotate a property or field of an entity class, mapped superclass, or embeddable class.

P.s. As of Hibernate 3 collections are lazy by default so there is no need to explicitly mark it as lazy.

这篇关于HIbernate映射异常:PropertyNotFoundException:无法找到setter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆