知识大全 Hibernate单向一对多注意的问题
Posted 语句
篇首语:逆水行舟用力撑,一篙松劲退千寻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate单向一对多注意的问题相关的知识,希望对你有一定的参考价值。
Hibernate单向一对多注意的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
这个 问题困扰我 多天 终于干掉了
本人使用myeclipse ga 进行hibernate一对多单向关联实例
一直报如下异常
Hibernate:
insert
into
hbql score
(score type)
values
: : DEBUG JDBCExceptionReporter: could not insert: [score Score] [insert into hbql score (score type) values (? ?)]
java sql SQLException: Field sid doesn t have a default value
at mysql jdbc SQLError createSQLException(SQLError java: )
//太长发不了 省略点
: : WARN JDBCExceptionReporter: SQL Error: SQLState: HY
: : ERROR JDBCExceptionReporter: Field sid doesn t have a default value
保存对象student Student失败!
: : DEBUG JDBCTransaction: rollback
hibernate exception GenericJDBCException: could not insert: [score Score]
at hibernate exception SQLStateConverter handledNonSpecificException(SQLStateConverter java: )
at hibernate exception Snvert(SQLStateConverter java: )
//太长发不了 省略点
Caused by: java sql SQLException: Field sid doesn t have a default value
at mysql jdbc SQLError createSQLException(SQLError java: )
测试程序如下
Student student=new Student( huizhi );
Score score =new Score( );
Score score =new Score( );
Set set=new HashSet();
set add(score );
set add(score );
student setScores(set);
saveObject(student);
printStudents();
映射文件Student hbm xml
<?xml version= encoding= utf ?>
<!DOCTYPE hibernate mapping PUBLIC //Hibernate/Hibernate Mapping DTD //EN
hiber/hibernate mapping dtd >
<hibernate mapping>
<class name= student Student table= student catalog= hbql >
<id name= id type= java lang Integer >
<column name= id />
<generator class= native />
</id>
<set name= scores table= score cascade= save update inverse= false >
<key>
<column name= sid not null= true />
</key>
<one to many class= score Score />
</set>
<property name= name type= java lang String >
<column name= name length= not null= true />
</property>
<property name= number type= java lang String >
<column name= number length= not null= true />
</property>
<property name= classid type= java lang Integer >
<column name= classid not null= true />
</property>
</class>
</hibernate mapping>
映射文件Score hbm xml
<?xml version= encoding= utf ?>
<!DOCTYPE hibernate mapping PUBLIC //Hibernate/Hibernate Mapping DTD //EN
hiber/hibernate mapping dtd >
<hibernate mapping>
<class name= score Score table= score catalog= hbql >
<id name= id type= java lang Integer >
<column name= id />
<generator class= native />
</id>
<property name= score type= java lang Integer >
<column name= score not null= true />
</property>
<property name= type type= java lang String >
<column name= type length= not null= true />
</property>
</class>
</hibernate mapping>
持久化类
public class Score implements java io Serializable
private Integer id;
private Integer score;
private String type;
…
public class Student implements java io Serializable
private Integer id;
private String name;
private String number;
private Integer classid;
private Set scores=new HashSet();
…
数据库表MySQL
DROP TABLE IF EXISTS `hbql` `student`;
CREATE TABLE `hbql` `student` (
`id` int( ) unsigned NOT NULL auto_increment
`name` varchar( ) NOT NULL
`number` varchar( ) NOT NULL
`classid` int( ) unsigned NOT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf ;
DROP TABLE IF EXISTS `hbql` `score`;
CREATE TABLE `hbql` `score` (
`id` int( ) unsigned NOT NULL auto_increment
`score` int( ) unsigned NOT NULL
`type` varchar( ) NOT NULL
`sid` int( ) unsigned NOT NULL
PRIMARY KEY (`id`)
KEY `FK_score_ ` (`sid`)
CONSTRAINT `FK_score_ ` FOREIGN KEY (`sid`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf ;
留意<set>元素中的inverse属性 该属性表示关联关系由主控(一方)还是受控方(多方)维护 所谓关联关系的维护就是受控方的外键插入由谁来控制 inverse默认为false 表示由主控方来控制 当主控方控制时 插入SQL的语句会分两条进行
insert into Items(itemName itemPrice orderId) values( aa NULL);
update Items set orderId = where itemName = aa and itemPrice = ;
因为主控方控制关联关系 意味受控方在插入数据时 不会考虑其外键引用 直接插入为NULL 直到主控方执行更新操作
因为HIbernate分两条SQL语句插入Score对象 所以在SCORE表中 第一次外键为空 所以定义数据库中外键时默认值应为NULL 第二次是更新该条记录的外键 本人在创建SCORE表外键SID默认是不能为空 所以会出现此种情况 更改为NULL一切正常
如下为HIbernate生成的SQL语句
部分
Hibernate:
insert
into
hbql score
(score type)
values
(? ?)
Hibernate:
update
hbql score
set
sid=?
where
cha138/Article/program/Java/ky/201311/28575相关参考
想了几天终于知道sql语句的发出问题查了很多书感觉都没有说清楚有的还是错的请看下面 [java] <?xmlversion=?> <!DOCTYPEhibernatemap
Hibernate一对多双向映射及乐观锁使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在H
Hibernate初学之一对多、多对一关系模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 举
Hibernate的多对一和一对多操作实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hib
Hibernate一对一主键关联映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
Java代码 packageDomain; publicclassPerson publicintgetId() returnid; publicvoidsetId(intid)
Hibernate中多对多关系的常见问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 1到底在
Hibernate数据源不得不注意的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hibe
在hibernate中是支持多条件动态查询的这种问题是非常实用的比如说你做一个项目要实现一个复合查询 例如有这么一个界面 那么要实现这个查询对于用户来说他的查询条件可能不健全有可能只填写其
Hibernate多对多双向关联(xml配置) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!