--角色权限关系表
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">
分享到:
相关推荐
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
hibernate 无主键表映射资源说明: 1. 简单Demo 2. Demo对应的sql语句 3. 对应博客文档
复合主键映射用起来比普通的增加主键字段要复杂,这里我们就来共同学习Java的Hibernate框架中复合主键映射的创建和使用教程,需要的朋友可以参考下
023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略
总共分5部分:1和2为hibernate入门,3为hibernate实体映射,4为hibernate复合主键,5为hibernate实体层设计.
1)根元素映射<hibernate-mapping/> 2)类映射 3)属性映射 4)主键的配置 5)主键生成策略 复合主键策略 史上最详细
复合(联合)主键映射(hibernate_composite) 27 集合(collection)映像 (hibernate_collection) 28 Hibernate 对数据库的并发支持 30 悲观锁(hibernate_pessimistic) 30 乐观锁(hibernate_optimistic) 32 HQL...
04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...
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 的注解学习 ExportDBAnnotation HibernateAnnotationUtils 【一对一】关系映射【一对多】关系映射 【多对多】关系映射 【composite复合主键】关系映射【component组件】关系映射
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. ...
15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 ...
18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_...
18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_...
18-Hibernate复合主键笔记 20-22Hibernate_容器映射技术笔记 23-26Hibernate数据关联技术笔记 27-32Hibernate数据关联技术_1vs1应用案例_笔记 33-37Hibernate1对N案例笔记 38-43Hibernate多对多案例笔记 J2EE框架_...
18-Hibernate复合主键笔记.pdf 19-Hibernate实体层设计笔记.pdf 2-JSP+JDBC_真分页(基于Oracle数据库分页)笔记.pdf 20-22Hibernate_容器映射技术笔记.pdf 23-26Hibernate数据关联技术笔记.pdf 27-32Hibernate数据...