【问题标题】:Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister error无法获取 org.hibernate.persister.entity.SingleTableEntityPersister 错误的构造函数
【发布时间】:2016-03-05 12:20:12
【问题描述】:

我不是休眠的频繁用户。我正在尝试创建多对一映射,但出现错误(主题)。我一直在寻找类声明中的错误,还有 getter(最后一个错误),但一切似乎都是正确的。有人在我的代码中看到任何错误吗?因为我想不通。

地址.java

package beans;

public class Adres {

  int id;
  String adresas;
  String adname;

  public Adres() {
  }

  public int getId() {
      return id;
  }

  public void setId(int id) {
      this.id = id;
  }

  public String getAdresas() {
      return adresas;
  }

  public void setAdresas(String adresas) {
      this.adresas = adresas;
  }

  public String getAdname() {
      return adname;
  }

  public void setAdname(String adname) {
      this.adname = adname;
  }
}

Men.java

package beans;

public class Men {

  int id;
  String name;

  Adres adres;

  public Men() {
  }

  public int getId() {
      return id;
  }

  public void setId(int id) {
      this.id = id;
  }

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public Adres getAdd() {
      return adres;
  }

  public void setAdd(Adres adres) {
      this.adres = adres;
  }
}

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db2</property>
    <property name="hibernate.connection.username">user</property>
    <property name="hibernate.connection.password">pass</property>
    <property name="hibernate.show_sql">true</property>
    <mapping resource="hbm/Men.hbm.xml"/>
    <mapping resource="hbm/Adres.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Men.hbm.xml

<hibernate-mapping>
  <class name="beans.Men" table="MEN">
     <id column="id" name="id" type="int">
       <generator class="native"/>
     </id>
     <property column="name" name="name" type="string"/>
     <many-to-one class="beans.Adres" column="adres" name="adres" not-null="true"/>
   </class>
 </hibernate-mapping>

Adres.bbm.xml

<hibernate-mapping>
  <class name="beans.Adres" table="ADRES">
    <id name="id" type="int" column="id">
      <generator class="native"/>
    </id>
    <property name="adresas" column="adresas" type="string"/>
    <property name="adname" column="adname" type="string"/>
  </class>
</hibernate-mapping>

Main.java

private static SessionFactory factory;

    public static void main(String[] args) {
        try {
            factory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Failed to create sessionFactory object." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

错误日志

Initial SessionFactory creation failed.org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
Exception in thread "main" java.lang.ExceptionInInitializerError
    at main.HibernateUtil.<clinit>(HibernateUtil.java:15)
    at main.Main.main(Main.java:17)
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:123)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:346)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at main.HibernateUtil.<clinit>(HibernateUtil.java:12)
    ... 1 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:91)
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:388)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:508)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
    ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88)
    ... 16 more
Caused by: org.hibernate.PropertyNotFoundException: Could not locate getter method for property [beans.Men#adres]
    at org.hibernate.internal.util.ReflectHelper.findGetterMethod(ReflectHelper.java:400)
    at org.hibernate.property.access.internal.PropertyAccessBasicImpl.<init>(PropertyAccessBasicImpl.java:41)
    at org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl.buildPropertyAccess(PropertyAccessStrategyBasicImpl.java:27)
    at org.hibernate.mapping.Property.getGetter(Property.java:299)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:270)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:145)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:63)
    ... 21 more

【问题讨论】:

  • 你的命名习惯真的很糟糕。您应该为类以及这些类的属性提供正确的名称。
  • 你认为它会解决我的问题吗?我相信不会。
  • 这与解决您的问题无关。它与您编写合理的代码有关,这至少对正在查看它的人有意义。..
  • @user2258338 收到答案后,您编辑了问题并修复了代码。您不应该这样做,因为问题中的代码不再重现您问题中的错误,并且答案不再与问题匹配。所以我在问题的代码中寻找getAdd(),但直到我查看修订历史时才找到它。也许你应该回滚编辑?

标签: java xml spring hibernate


【解决方案1】:

您应该从

更改 Men 类中 adres 属性的 getter 和 setter
public Adres getAdd() {
    return adres;
}

public void setAdd(Adres adres) {
    this.adres = adres;
}

public Adres getAdres() {
    return adres;
}

public void setAdres(Adres adres) {
    this.adres = adres;
}

我建议给一个有意义的变量名和相关的getter、setter!

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多