Hibernate做好这几步,轻松完成一对多关系映射配置(实例)
来源:互联网 发布:淘宝运营 策划能力 编辑:程序博客网 时间:2024/06/16 18:26
这几天的颓废和拖延
不知道为什么,一个月总有那么几天心不在焉。硬坐在电脑边上,努力定心地去敲代码,却总是力不从心。打开了熟悉的IDEA,写了两行注释,却再也写不下去了。可能是天气变冷了吧,人的惰性又出来作祟了。答应了同学好久的接口,一天一天的拖延了下来。还有好多工作都没做完呢,可是我却没有当初的那个状态了。配置Hibernate错误也是层出不穷。花了好长的时间来修改bug,总算是弄好了
总有bug,在催促着你成长
在控制台中看到的错误信息,都是获取sessionFactory时出的错。这说明和我们本身写的代码无关。后来检查了好几遍配置文件信息基本没有发现什么问题。以为刚开始写配置文件的时候就是从网上参考的代码配置many to one,但是控制台一直报错。
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of entity.Rider.id at org.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:64) at...Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring classorg.hibernate.property.access.spi.GetterMethodImpl.get(GetterMethodImpl.java:41) ... 30 more
看错误信息好像是没有找到Rider.id的get方法,并且Hibernate框架的反射也出现了错误。
关于get方法,我确信我是不会写错的。在检查并且测试了好几遍之后,我终于放弃了get方法。继续检查配置文件。
后来发现还是many to one这个属性没用好。一方面要在本类定义外键另一方面在外键的那个类也要定义one to many属性。
详细的配置步骤如下
1.定义普通的javaBean
这里解释一下我的这两个类。
Rider类是骑手,可以拥有多个账单流水。于是要在这个类里面定义set集合存放account类。表示当前rider拥有的account
Account类是账单流水类。这个类要定义Rider属性,表明当前账单流水属于哪个骑手。
两个类的代码如下:省略构造方法和set get
package entity;import java.util.Date;import java.util.HashSet;import java.util.Set;/** * Created by zipple on 2017/10/18. * 骑手 */public class Rider { private int id;//骑手id private String username;//骑手用户名 private String password;//骑手登录密码 private String phone;//联系电话 private int creditScore;//信誉积分,默认为20 private int deposit;//交纳押金 默认100 private int balance;//余额---接单所获酬劳 private int cancelCount;//取消订单数量,超过2次即取消接单资格 private int remainCount;//本日剩余接单数,凌晨自动重置为3 private Date createdAt; private Set<Account> accounts = new HashSet<>();//一个骑手可以有多个账单流水 //省略set get 构造方法}
package entity;import java.util.Date;/** * Created by zipple on 2017/10/18. * 账户明细,骑手账单流水 */public class Account { private int id;//账单流水id private double details;//账单流水 private int type;//流水方式 private Date createAt;//流水创建时间 private Rider rider;//此订单所属骑手}
编写配置文件*.hbm.xml
Rider类由于有set属性,这里要配置one to many属性,具体配置信息如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="entity.Rider" table="rider"> <id name="id" column="id"> <generator class="native"/> </id> <property name="username" column="username"/> <property name="password" column="password"/> <property name="phone" column="phone"/> <property name="creditScore" generated="insert"> <column name="creditScore" default="30" not-null="true"/> </property> <property name="deposit" generated="insert"><!--默认没交押金--> <column name="deposit" default="0" not-null="true"/> </property> <property name="balance" generated="insert"> <column name="balance" default="0" not-null="true"/> </property> <property name="cancelCount" generated="insert"> <column name="cancelCount" default="0" not-null="true"/> </property> <property name="remainCount" generated="insert"> <column name="remainCount" default="3" not-null="true"/> </property> <property name="createdAt" generated="insert"> <column name="createdAt" sql-type="timestamp" default="CURRENT_TIMESTAMP" not-null="true" /> </property> <set name="accounts" cascade="save-update,delete"> <key column="id"/><!--rider类的id,即是Account的外键--> <one-to-many class="entity.Account"/> </set> </class></hibernate-mapping>
account类配置信息:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="entity.Account" table="account"> <id name="id" column="id"> <generator class="native"/> </id> <!--流水明细属于多的一方,可以根据多的一方决定骑手--> <!--需要定义class属性完成一对多配置,riderId根据rider的主键id生成--> <many-to-one name="rider" column="riderId" class="entity.Rider" not-null="true"/> <property name="details" column="details"/> <property name="type" column="type"/> <property name="createAt" generated="insert"> <column name="createdAt" sql-type="timestamp" default="CURRENT_TIMESTAMP" not-null="true" /> </property> </class></hibernate-mapping>
- Hibernate做好这几步,轻松完成一对多关系映射配置(实例)
- Hibernate关系映射----单向一对多实例
- Hibernate 映射关系 一对多 单向映射文件配置
- hibernate 映射关系—关系映射(一对多)
- Hibernate关系映射(3) 一对多关系映射
- Hibernate 一对多关系映射
- hibernate一对多关系映射
- Hibernate一对多关系映射
- Hibernate映射一对多关系
- Hibernate一对多关系映射
- Hibernate关系映射一对多
- hibernate一对多关系映射
- Hibernate中一对多的映射关系实例
- hibernate映射一对多双向关联关系实例
- Hibernate关系映射---双向一对多增删查改实例
- Hibernate关系映射文件一对多,多对一配置
- Hibernate关联关系映射-----单向一对多配置
- Hibernate一对多关系映射(双向映射)
- 第四周【项目5
- 第7周 【项目2
- 第五周-项目1
- JAVA:使用POI读取excel文件中的日期
- kotlin入门笔记
- Hibernate做好这几步,轻松完成一对多关系映射配置(实例)
- nodejs -- mysql模块占位符 ? ??
- java集合详解锦集
- Rhyme/ Linux 文件系统常用命令—mount挂载命令以及-o特殊选项查询表
- 二层交换机实现vlan 功能 (Cisco Packer Tracer 模拟器)
- python生成caffe binary proto文件
- 第七周项目一
- myeclipse 2014,eclipse 安装阿里巴巴Java开发规约插件
- 微信商户中查看 appid