这几天的颓废和拖延
不知道为什么,一个月总有那么几天心不在焉。硬坐在电脑边上,努力定心地去敲代码,却总是力不从心。打开了熟悉的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 class
org.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框架中many-to-one配置错误的过程,包括遇到的具体异常、配置问题定位及解决步骤。
1万+

被折叠的 条评论
为什么被折叠?



