版本:hibernate4.3.5
单向一对多,一端为主控端。一个person实体有多个address实体.采用主外键的方式。
person表有person_id,name,age三个cloumn,其中为PK。
address表有address_id,address_name,person_id,其中address_id为PK,person_id为FK,且为notNull。
person实体的定义:
@Id
@Column(name="PERSON_ID")
private int personId = 0;
@Column(name="NAME")
private String name = null;
@Column(name="AGE")
private int age = 0;
@OneToMany(targetEntity=Address_OneToMany.class)
@JoinColumn(name="PERSON_ID",nullable=false, referencedColumnName="PERSON_ID")
@Cascade(CascadeType.ALL)
private Set<Address_OneToMany> address = new HashSet<Address_OneToMany>();
省略setter,getter
address实体定义:
@Id
@Column(name="ADDRESS_ID")
private int addressId=0;
@Column(name="ADDRESS_NAME")
private String addressName = null;
省略setter,getter
在client端,new两个address,再加到person的set中,最后persist这个person:
Address address1 = new Address(411,"lv shun");
Address address2 = new Address(101,"beijing");
Person person1 = new Person(210824,"father",59);
person1.getAddress().add(address1);
person1.getAddress().add(address2);
session.persist(person1);
按书上的说法,这种情况下,如果address表的外键person_id为notnull,则直接出错;如果address表的外键person_id可以为null,则先insert,再update。
但是我现在的情况是address表的外键person_id为notnull,但是却没有出错,而是先insert后update。而且insert时,person_id直接就可以取到personId,接着再用相同的值再update一次。如下:
insert
into
TEST_PERSON
(AGE, NAME, PERSON_ID)
values
(?, ?, ?)
2014-12-19 14:18:29,378 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [1] as [INTEGER] - [59]
2014-12-19 14:18:29,379 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [2] as [VARCHAR] - [father]
2014-12-19 14:18:29,379 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [3] as [INTEGER] - [210824]
2014-12-19 14:18:29,478 DEBUG (org.hibernate.SQL:109) -
insert
into
TEST_ADDRESS
(ADDRESS_NAME, PERSON_ID, ADDRESS_ID)
values
(?, ?, ?)
2014-12-19 14:18:29,478 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [1] as [VARCHAR] - [lv shun]
2014-12-19 14:18:29,478 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [2] as [INTEGER] - [210824]
2014-12-19 14:18:29,479 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [3] as [INTEGER] - [411]
2014-12-19 14:18:29,575 DEBUG (org.hibernate.SQL:109) -
insert
into
TEST_ADDRESS
(ADDRESS_NAME, PERSON_ID, ADDRESS_ID)
values
(?, ?, ?)
2014-12-19 14:18:29,575 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [1] as [VARCHAR] - [beijing]
2014-12-19 14:18:29,575 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [2] as [INTEGER] - [210824]
2014-12-19 14:18:29,576 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [3] as [INTEGER] - [101]
2014-12-19 14:18:29,672 DEBUG (org.hibernate.SQL:109) -
update
TEST_ADDRESS
set
PERSON_ID=?
where
ADDRESS_ID=?
2014-12-19 14:18:29,672 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [1] as [INTEGER] - [210824]
2014-12-19 14:18:29,673 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [2] as [INTEGER] - [411]
2014-12-19 14:18:29,769 DEBUG (org.hibernate.SQL:109) -
update
TEST_ADDRESS
set
PERSON_ID=?
where
ADDRESS_ID=?
2014-12-19 14:18:29,769 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [1] as [INTEGER] - [210824]
2014-12-19 14:18:29,769 TRACE (org.hibernate.type.descriptor.sql.BasicBinder:81) - binding parameter [2] as [INTEGER] - [101]
在oracle11g上运行会出这种情况,实验环境:oracle11g, jdk1.7,ojdbc6.jar
但在mysql上却按预期般的出错,实验环境:mysql5.6,jdk7
分享到:
相关推荐
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...
从官网上下的hibernate4.3.5的jar包以及文档api参考
hibernate官网提供的下载地址无法下载。。 为了方便大家,转在csdn一份。... hibernate-release-4.3.5.Final 注意: 由于CSDN限制只能上传60M的文件, 这个里面【不包含文档】,需要文档的话请到我的另一个资源中下载
hibernate4.3.5references chm文档
hibernate-release-4.3.5.Final包含jar包、相关的api
自己整理的hibernate4.3.5 core参考文档,详细的开发文档,chm格式,看着更加方便
hibernate4.3.5 + Hibernate-EHCache-4.3.5+C3P0.0.9+oracle 10g测试用例 http://blog.csdn.net/alanchen520/article/details/34072353
一下午才整合成功,书中的bulidSessionFactory()方法在hibernate4.3.5中已经deprecated,这里面有方法实现,用完请给好评。
SpringMVC+Spring3.2.8+Hibernate4.3.5带简单的分页实例,集成时使用hibernate-core-4.3.5.Final.jar时会报错, (网上说该Jar包中某个类的包路径改了,Spring找不到,所以换成了Hibernate4.2 的Core包了)这是BUG么...
目前最新版本的S2SH框架(struts2.3.16.3+spring4.0.4+hibernate4.3.5)的搭建DEMO,里面的配置齐全,xml都有配置demo,lib包下为整合的最小jar包,需要其他功能的自行添加,myeclipse项目,MVC三层都有示例class,可以直接...
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...
本代码包含了hibernate 的一对多的双向关联,实现级联保存,并整合了Hibernate的过滤器功能、c30的数据库连接池功能。
这是目前最新的Spring库文件,以及Hibernate库文件,并提供DBCP2为数据源,加以Pool2。
hibernate-release-4.3.5.Final,权限不足,分两次传
hibernate-release-4.3.5.Final的英文帮助文档
http://blog.csdn.net/alanchen520/article/details/34424577
hibernate-release-4.3.5.Final.zip 最新 稳定 最终版
Hibernate JavaDoc (4.3.5.Final)
需要整合SSH框架最新jar包的朋友可以下载