Hibernate操作没有主键数据表
来源:互联网 发布:mac唇膏专柜 编辑:程序博客网 时间:2024/04/27 19:29
在数据库中中间表往往可能没有主键,而Hibernate检索的时候是根据主键检索的,这样就无法直接检索中间表中的数据。对于这种情况Hibernate会自动生成一个主键辅助类来辅助检索,下面看具体使用方法。
数据库存在数据表region表存有两个字段,一个city字段,一个code字段,city字段存放城市名,code字段存放城市代码。没有指定主键。
这是使用Hibernate的反向工程自动创建POJO类和映射关系。同时会自动生成一个辅助类。
首先看一下POJO类。
public class RegionId implements java.io.Serializable {// Fieldsprivate String city;private String eamcode;// Constructors/** default constructor */public RegionId() {}/** full constructor */public RegionId(String city, String eamcode) {this.city = city;this.eamcode = eamcode;}// Property accessorspublic String getCity() {return this.city;}public void setCity(String city) {this.city = city;}public String getEamcode() {return this.eamcode;}public void setEamcode(String eamcode) {this.eamcode = eamcode;}}然后看他的辅助类
public class Region implements java.io.Serializable {// Fieldsprivate RegionId id;// Constructors/** default constructor */public Region() {}/** full constructor */public Region(RegionId id) {this.id = id;}// Property accessorspublic RegionId getId() {return this.id;}public void setId(RegionId id) {this.id = id;}}我们可以看到这个辅助类中只有一个RegionId类型的成员id。
下面看一下他的映射关系。
<hibernate-mapping> <class name=Region" table="region" schema="dbo"> <composite-id name="id" class="RegionId"> <key-property name="city" type="java.lang.String"> <column name="city" length="20" /> </key-property> <key-property name="eamcode" type="java.lang.String"> <column name="eamcode" length="20" /> </key-property> </composite-id> </class></hibernate-mapping>上述类和映射文件都是Hibernate反向工程自动生成的。
下面看一下如何操作数据表,这里已查询为例:
public List findByProperty(String propertyName, Object value) {try {String queryString = "from Region as model where model."+ propertyName + "= ?";Query queryObject = getSession().createQuery(queryString);queryObject.setParameter(0, value);return queryObject.list();} catch (RuntimeException re) {throw re;}}然后看测试类
public static void main(String[] args) {RegionDAO df = new RegionDAO();List list = df.findByProperty("id.city", "3701");Region u = (Region) list.get(0);System.out.println(u.getId().getcode());}这里要注意的是操作的一直是Hibernate生成的辅助类,但是在传数据时还有获取数据时都是从Region类的Id中获取指定的RegionId。
0 0
- Hibernate操作没有主键数据表
- Hibernate复合主键(注解)操作分区数据表
- hibernate执行更新操作的时候,没有主键会报错
- C# 读取数据表没有主键的问题
- hibernate操作联合主键
- SQL查找数据库中所有没有主键的数据表脚本
- mysql新建数据表后打开提示没有主键
- hibernate 连 oracle 没有主键怎么办
- Hibernate初学者---schemaExport自动生成联合主键关联数据表
- 为一个有数据没有主键id的数据表添加主键字段
- mysql 数据表中主键(primary key)的操作
- hibernate操作oracle数据库 主键自增
- Hibernate基于主键一对一映射操作实例
- 查找数据表的主键
- 查找数据表的主键
- 查找数据表的主键
- 查找数据表的主键
- SQL取数据表主键
- Android UI卡顿问题的总结
- How to show Chinese character by using Perl?
- android sqlite数据库并发问题的详细描述和解决方案
- mysql引擎
- 应该知道的Linux技巧
- Hibernate操作没有主键数据表
- Tomcat6配置SSL的方法
- STM32固件库详解
- J2ME及其移植
- iOS遍历视图里的所有子视图
- 动态规划-时间规整算法
- Qt中各个widget前后位置的设置
- Linux各种包安装命令
- AIX中The largest dump device is too small的处理