`
busing
  • 浏览: 40596 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hibernate 复合主键的映射问题

阅读更多
--角色权限关系表
create table role_power_relation(
	roleid int not null,
	powerid int not null,
	primary key(roleid,powerid)
	);

  此表有复合主键,Hibernate反向工程映射结果

<hibernate-mapping>
    <class name="com.qdhh.system.entity.RolePowerRelation" table="role_power_relation" catalog="curtain">
        <composite-id name="id" class="com.qdhh.system.entity.RolePowerRelation">
            <key-property name="roleid" type="integer">
                <column name="roleid" />
            </key-property>
            <key-property name="powerid" type="integer">
                <column name="powerid" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>

 

 

java 文件

 

public class RolePowerRelation implements Serializable{

	// Fields
	private Integer roleid;
	private Integer powerid;

	// Constructors

	/** default constructor */
	public RolePowerRelation() {
	}

	/** full constructor */
	public RolePowerRelation(Integer roleid, Integer powerid) {
		this.roleid = roleid;
		this.powerid = powerid;
	}
……省略get和set方法

 

junit测试代码

 

public class TestCurtainDAO extends TestCase{

	String[] xmls=new String[]{
							"D:\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Curtain\\WEB-INF\\applicationContext.xml",
							"D:\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Curtain\\WEB-INF\\applicationContext-action.xml",
							"D:\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Curtain\\WEB-INF\\applicationContext-dao.xml"};
	
	BeanFactory factory=new FileSystemXmlApplicationContext(xmls);

	private CurtainHibernateDAO service;
	@Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
		super.setUp();
	}

	@Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		super.tearDown();
	}
	
	public void testFindAll()
	{
		service=(CurtainHibernateDAO)factory.getBean("curtainDAO");
		List<Curtain> curtains=service.findAll();
		for (Curtain curtain : curtains) {
			System.out.println(curtain.getTime()+"\t"+curtain.getSummary()+"\t"+curtain.getPropertyid()+"\t"+curtain.getBorrow()+"\t"+curtain.getLoan()+"\t"+curtain.getBalance());
		}
	}
	
}
此测试只是启动spring,只要启动spring就会报错的

 

测试结果

 

Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for id in class com.qdhh.system.entity.RolePowerRelation
	at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:282)
	at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:275)
	at org.hibernate.tuple.PropertyFactory.getGetter(PropertyFactory.java:168)
	at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:44)
	at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:123)
	at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
	at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
	at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1367)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
	... 41 more
)
	

 

说明:

  Hibernate映射联合主键表的时候,会将联合主键抽取成一个类,查询记录是就按照联合主键方式方式来查找了。
    当然,我们也可也不让他抽取,如果没必要的话。

 

解决办法:

 
方法1.将hbm文件的   <composite-id name="id" class="com.qdhh.system.entity.RolePowerRelation">
改成 <composite-id >

方法2.创建一个复合主键的类

public class Key implements Serializable {   
    private int roleid;   
    private String powerid;   
       // 省略所有getter和setter方法   
} 

 

    修改hbm文件

<composite-id name="id" class="Key">

 

 

 

分享到:
评论

相关推荐

    hibernate复合主键映射

    复合主键映射 &lt;br&gt;通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射

    hibernate 无主键表映射

    hibernate 无主键表映射资源说明: 1. 简单Demo 2. Demo对应的sql语句 3. 对应博客文档

    Java的Hibernate框架中复合主键映射的创建和使用教程

    复合主键映射用起来比普通的增加主键字段要复杂,这里我们就来共同学习Java的Hibernate框架中复合主键映射的创建和使用教程,需要的朋友可以参考下

    Hibernate学习笔记

    023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略

    Hibernate入门(代码+笔记)

    总共分5部分:1和2为hibernate入门,3为hibernate实体映射,4为hibernate复合主键,5为hibernate实体层设计.

    Hibernate映射配置入门进阶详解

    1)根元素映射&lt;hibernate-mapping/&gt; 2)类映射 3)属性映射 4)主键的配置 5)主键生成策略 复合主键策略 史上最详细

    hibernate学习笔记

    复合(联合)主键映射(hibernate_composite) 27 集合(collection)映像 (hibernate_collection) 28 Hibernate 对数据库的并发支持 30 悲观锁(hibernate_pessimistic) 30 乐观锁(hibernate_optimistic) 32 HQL...

    Hibernate3.1_学习源码

    04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...

    Hibernate Annotations 中文文档

    2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4...

    hibernate注解案例

    Hibernate 的注解学习 ExportDBAnnotation HibernateAnnotationUtils 【一对一】关系映射【一对多】关系映射 【多对多】关系映射 【composite复合主键】关系映射【component组件】关系映射

    hibernate annotation 中文文档

    2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     15.1.2 按照主键映射  15.2 映射单向多对多关联  15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用元素  15.3.3 使用组件类集合  15.3.4 把多对多关联分解为两个一对多关联 ...

    J2EE三大框架_笔记_a

    18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_...

    J2EE框架_笔记_c

    18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_...

    J2EE框架_笔记_b

    18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_...

    javaEE框架笔记,识货人下

    18-Hibernate复合主键笔记.pdf 19-Hibernate实体层设计笔记.pdf 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记.pdf 20-22Hibernate_容器映射技术笔记.pdf 23-26Hibernate数据关联技术笔记.pdf 27-32Hibernate数据...

Global site tag (gtag.js) - Google Analytics