hibernate mysql cascade_Hibernate级联cascade 完整实例 及 错误解决(mysql)

最近在学习Hibernate(基于《深入浅出Hibernate》一书),在动手练习的时候,出现了一些问题,并加以解决,现将其罗列如下:

数据库表创建:

CREATE TABLE `t_user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(45) default NULL,

`age` int(3) default NULL,

`group_id` int(11) default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `t_passport` (

`id` int(11) NOT NULL ,

`serial` varchar(30) default NULL,

`expiry` int(11) default NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置文件:

/p>

"http://www.springframework.org/dtd/spring-beans.dtd">

com/chinabank/b2c/hbm/TUser.hbm.xml

com/chinabank/b2c/hbm/TPassport.hbm.xml

net.sf.hibernate.dialect.MySQLDialect

true

true

true

test

0

/p>

"-//Hibernate/Hibernate Mapping DTD//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

cascade="all" outer-join="true">

/p>

"-//Hibernate/Hibernate Mapping DTD//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

user

constrained="true">

javabean定义

package com.chinabank.b2c.hbm;

import java.io.Serializable;

public class TUser implements Serializable {

/**

*

*/

private static final long serialVersionUID = -1523232529237055567L;

public TUser(){

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public TPassport getPassport() {

return passport;

}

public void setPassport(TPassport passport) {

this.passport = passport;

}

private Integer id;

private Integer age;

private String name;

private TPassport passport;

}

package com.chinabank.b2c.hbm;

import java.io.Serializable;

public class TPassport implements Serializable {

/**

*

*/

private static final long serialVersionUID = -7458971855517828094L;

public TPassport(){

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getSerial() {

return serial;

}

public void setSerial(String serial) {

this.serial = serial;

}

public Integer getExpiry() {

return expiry;

}

public void setExpiry(Integer expiry) {

this.expiry = expiry;

}

public TUser getUser() {

return user;

}

public void setUser(TUser user) {

this.user = user;

}

private Integer id;

private String serial;

private Integer expiry;

private TUser user;

public String toString(){

return this.serial+this.id+this.expiry+user.toString();

}

}

public void cascadeT(){

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

HibernateTransactionManager manager = (HibernateTransactionManager) context.getBean("myTransactionManager");

try {

Session session = manager.getSessionFactory().openSession();

TUser user = new TUser();

user.setAge(new Integer(20));

user.setName("Carin");

TPassport passport = new TPassport();

passport.setSerial("PCN759386");

passport.setExpiry(new Integer(20150101));

// 设置关联

passport.setUser(user);

user.setPassport(passport);

Transaction tx = session.beginTransaction();

session.save(user);

tx.commit();

} catch (HibernateException e) {

e.printStackTrace();

}

}

以上是最终代码。在此之前,曾遇到过这样几个问题:

错误1.hibernate方言适配器配置不对。

2012-5-22 3:22:12 net.sf.hibernate.id.TableGenerator generate

严重: could not read a hi value

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'test.hibernate_unique_key' doesn't exist

错:org.hibernate.dialect.MySQLDialect

对:net.sf.hibernate.dialect.MySQLDialect

错误2. 主键没有设置为自动增长

警告: SQL Error: 1364, SQLState: HY000

2012-5-22 3:27:05 net.sf.hibernate.util.JDBCExceptionReporter logExceptions

严重: Field 'id' doesn't have a default value

net.sf.hibernate.exception.GenericJDBCException: could not insert: [com.chinabank.b2c.hbm.TUser]

`id` int(11) NOT NULL 之后加上 AUTO_INCREMENT 即:`id` int(11) NOT NULL AUTO_INCREMENT

错误3. 错误的添加外键,画蛇添足

警告: SQL Error: 1452, SQLState: 23000

2012-5-22 3:34:40 net.sf.hibernate.util.JDBCExceptionReporter logExceptions

严重: Cannot add or update a child row: a foreign key constraint fails (`test`.`t_user`, CONSTRAINT `fk1` FOREIGN KEY (`id`) REFERENCES `t_passport` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

net.sf.hibernate.exception.GenericJDBCException: could not insert: [com.chinabank.b2c.hbm.TUser]

去掉外键

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-05-22 11:08

浏览 1190

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值