`
最王座
  • 浏览: 139649 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hibenrate异常:Could not get constructor for org.hibernate.persister.entity.SingleT

阅读更多

Hibernate异常:

Initial SessionFactory creation failed.org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister

 

环境:hibernate-core版本4.2.17.Final

 

POJO类:User

 

package com.ssh.model;

public class User {
	private long id;
	private String name;
	private int age;
	private boolean isMan;
	private Group group;
	
	public long getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public boolean isMan() {
		return isMan;
	}

	public void setMan(boolean isMan) {
		this.isMan = isMan;
	}

	public Group getGroup() {
		return group;
	}

	public void setGroup(Group group) {
		this.group = group;
	}
	
}

 

 

HBM映射文件:

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ssh.model">


	<class name="User" table="t_user">
		<id name="id" type="java.lang.Long" column="u_id">
			<!-- <generator class="sequence">
				<param name="sequence">user_id_seq</param>
			</generator> -->
			<generator class="native"></generator>
		</id>
		
		<property name="name" column="u_name"></property>
		<property name="age" column="u_age"></property>
		<property name="isMan" column="u_man" type="yes_no"></property>
		
		<many-to-one name="group" column="u_group"></many-to-one>
		
	</class>

</hibernate-mapping>

 

 

解释:

出现该异常是当hibernate解析hbm文件时,看到<property name="isMan" column="u_man" type="yes_no"></property>就找到对应的实体类User,去其中找setIsMan()方法,但是可惜没有。为什么没有呢?User类中有isMan属性啊,但是在通过eclipse为我们生成getter和setter时,eclipse发现是is开始的属性生成setter方法时主动去掉了is,生成getter方法时却没有用get开头,最终变成如下结果:

public boolean isMan() {
	return isMan;
}

public void setMan(boolean isMan) {
	this.isMan = isMan;
}

所以当hibernate想找setIsMan方法时就找不到了。

解决方法1:修改hbm中的property标签的name属性为man(setMan的Man部分)

解决方法2:修改POJO类的setter方法为setIsMan

 

通过该异常我们得出结论:

POJO类的属性尽量不要使用is开头,如果使用is开头,那么就手动编写getter和setter方法,以防出现该异常。

 

 

分享到:
评论

相关推荐

    Hibenrate之多对多关联

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库。本文将深入探讨Hibernate中的多对多关联映射,这是一种常见的数据库关系模型,尤其在处理复杂数据...

    Hibernate更新某些字段

    Hibernate 更新某些字段 Hibernate 是一个基于 Java 的 ORM 框架,它提供了对数据库的操作接口。在实际开发中,我们经常需要更新数据库中的某些字段,而不是所有字段。那么,如何使用 Hibernate 实现更新某些字段呢...

    hibernate struts2 spring

    Hibernate、Struts2和Spring是Java领域内非常流行的开源框架,它们分别在持久层、表现层和应用层提供了强大的支持。这三个框架的集成使用,可以构建出高效、稳定且易于维护的Web应用程序。接下来,我们将深入探讨这...

    hibernate学习资料

    hibernahibernate学习资料te学习资料hibernate学习资料v

    图书馆之春:您可以在其中借书的图书馆Web应用程序。 这是Spring MVC和Hibernate项目

    数据库和配置MySQL 飞路(用于数据迁移) GradleTomcat吉特Google Book API 后端技术JavaSpring MVC,Spring AOP,Spring Security Hibernate ORM,Hibernate Validator,Hibenrate Search(Lucene) 翻新,JSON ...

    hibernatewuwei

    hibenrate的代码本人的培训的代码,老师讲解的很好。是一个学习hibenrate的好的工具

    公交车查询系统,公交车查询系统

    公交车查询系统是一款基于Java技术栈,利用Spring框架和Hibernate ORM工具构建的Web应用程序,旨在为用户提供方便快捷的公交线路、站点及时刻查询服务。在这个系统中,用户可以通过输入公交线路号或者站点名称,获取...

Global site tag (gtag.js) - Google Analytics