当前位置:文档之家› Hibernate配置文件中映射元素详解

Hibernate配置文件中映射元素详解

Hibernate配置文件中映射元素详解
Hibernate配置文件中映射元素详解

Hibernate配置文件中映射元素详解

添加时间:2007-4-22

本文中将讲述Hibernate的基本配置及配置文件的应用,这对于正确熟练使用Hibernate是相当关

键的。

配置文件中映射元素详解

对象关系的映射是用一个XML文档来说明的。映射文档可以使用工具来生成,如XDoclet,Middlegen 和AndroMDA等。下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。

<?xml version="1.0"?>

<!--

所有的XML映射文件都需要定义如下所示的DOCTYPE。

Hibernate会先在它的类路径(classptah)中搜索DTD文件。

-->

<!DOCTYPE hibernate-mapping PUBLIC

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

"http://https://www.doczj.com/doc/4a4624355.html,/hibernate-mapping-3.0.dtd">

<!--

hibernate-mapping有几个可选的属性:

schema属性指明了这个映射的表所在的schema名称。

default-cascade属性指定了默认的级联风格可取值有none、save、update。

auto-import属性默认让我们在查询语言中可以使用非全限定名的类名可取值有true、false。

package属性指定一个包前缀。

-->

<hibernate-mapping schema="schemaName" default-cascade="none"

auto-import="true" package="test">

<!--用class元素来定义一个持久化类-->

<class name="People" table="person">

<!-- id元素定义了属性到数据库表主键字段的映射。-->

<id name="id">

<!-- 用来为该持久化类的实例生成唯一的标识-->

<generator class="native"/>

</id>

<!-- discriminator识别器是一种定义继承关系的映射方法-->

<discriminator column="subclass" type="character"/>

<!-- property元素为类声明了一个持久化的,JavaBean风格的属性-->

<property name="name" type="string">

<column name="name" length="64" not-null="true" />

</property>

<property name="sex"

not-null="true"

update="false"/>

<!--多对一映射关系-->

<many-to-one name="friend"

column="friend_id"

update="false"/>

<!--设置关联关系-->

<set name="friends" inverse="true" order-by="id">

<key column="friend_id"/>

<!—一对多映射-->

<one-to-many class="Cat"/>

</set>

</class>

</hibernate-mapping>

组件应用的方法

组件有两种类型,即组件(component)和动态组件(dynamic-component)。在配置文件中,component元素为子对象的元素与父类对应表的字段建立起映射关系。然后组件可以声明它们自己的属性、组件或者集合。component元素的定义如下所示:

<component name="propertyName" class="className" insert="true|false"

upate="true|false" access="field|property|ClassName">

<property ...../>

<many-to-one .... />

........

</component>

在这段代码中,name是指属性名,class是类的名字,insert指的是被映射的字段是否出现在SQL 的INSERT语句中,upate指出被映射的字段是否出现在SQL的UPDATE语句中,access指出访问属

性的策略。

Hiebernate的基本配置

Hibernate的数据库连接信息是从配置文件中加载的。Hibernate的配置文件有两种形式:一种是XML格式的文件,一种是properties属性文件。properties形式的配置文件默认文件名是

hibernate.properties,一个properties形式的配置文件内容如下所示:

#指定数据库使用的驱动类

hibernate.connection.driver_class = com.mysql.jdbc.Driver r

#指定数据库连接串

hibernate.connection.url = jdbc:mysql://localhost:3306/db

#指定数据库连接的用户名

https://www.doczj.com/doc/4a4624355.html,ername = user

#指定数据库连接的密码

hibernate.connection.password = password

#指定数据库使用的方言

hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect

#指定是否打印SQL语句

hibernate.show_sql=true

在配置文件中包含了一系列属性的配置,Hibernate将根据这些属性来连接数据库。

在XML格式的配置文件中,除了基本的Hibernate配置信息,还可以指定具体的持久化类的映射文件,这可以避免将持久化类的配置文件硬编码在程序中。XML格式的配置文件的默认文件名为hibernate.cfg.xml,一个XML配置文件的示例如下所示:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"https://www.doczj.com/doc/4a4624355.html,/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!--显示执行的SQL语句-->

<property name="show_sql">true</property>

<!--连接字符串-->

<property name="connection.url">jdbc:mysql://localhost:3306/STU</property>

<!--连接数据库的用户名-->

<property name="https://www.doczj.com/doc/4a4624355.html,ername">root</property>

<!--数据库用户密码-->

<property name="connection.password">root</property>

<!--数据库驱动-->

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<!--选择使用的方言-->

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<!--映射文件-->

<mapping resource="com/stuman/domain/Admin.hbm.xml" />

<!--映射文件-->

<mapping resource="com/stuman/domain/Student.hbm.xml" />

</session-factory>

</hibernate-configuration>

properties形式的配置文件和XML格式的配置文件可以同时使用。当同时使用两种类型的配置文件时,XML配置文件中的设置会覆盖properties配置文件的相同的属性。

对象标识符号

在关系数据库表中,主键(Primary Key)用来识别记录,并保证每条记录的唯一性。在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两个变量引用的对象值是否相同来判断两对象是否相等。Hibernate为了解决两者之间的不同,使用对象标识符(OID)来标识对象的唯一性。OID是关系数据库中主键在Java对象模型中的等价物。在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系。如下代码所示,三次调用了Session的load()方法,分别加载OID为

1或3的User对象。

Transaction tx = session.beginTransaction();

User user1 = (User)session.load(User.class,new Long(1));

User user2 = (User)session.load(User.class,new Long(1));

User user3 = (User)session.load(User.class,new Long(3));

System.out.println( user1 == user2 );

System.out.println( user1 == user3 );

应用程序在执行上述代码时,第一次加载OID为1的User对象,从数据库中查找ID为1的记录,然后创建相应的User实例,并把它保存在Session缓存中,最后将该实例的引用赋值给变量user1。第二次加载OID为1的对象时,直接把Session缓存中OID为1的实例的引用赋值给变量user2。因此,表达

式user1==user2的结果为true。

标识的生成可以使用不同的策略,表1为Hibernate内置的标识生成策略。

表1 Hibernate标识生成策略

标识符生成器描述

increment 适用于代理主键。由Hibernate自动以递增方式生成。

identity 适用于代理主键。由底层数据库生成标识符。

sequence 适用于代理主键。Hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列。

hilo 适用于代理主键。Hibernate分局high/low算法生成标识符。

seqhilo 适用于代理主键。使用一个高/低位算法来高效的生成long,short或者int类型的标识符。

native 适用于代理主键。根据底层数据库对自动生成标识符的方式,自动选择identity、sequence或hilo。

uuid.hex 适用于代理主键。Hibernate采用128位的UUID算法生成标识符。

适用于代理主键。UUID被编码成一个16字符长的字符串。

uuid.string

assigned 适用于自然主键。由Java应用程序负责生成标识符。

foreign 适用于代理主键。使用另外一个相关联的对象的标识符。

Hibernate映射类型

在对象/关系映射文件中,Hibernate采用映射类型作为Java类型和SQL类型的桥梁。Hibernate

映射类型分为2种:内置映射类型和自定义映射类型。

1、内置映射类型

Hibernate对所有的Java原生类型、常用的Java类型如String、Date等都定义了内置的映射类型。

表2列出了Hibernate映射类型、对应的Java类型以及对应的标准SQL类型。

表2 Hibernate内置映射类型

Hibernate映射类型Java类型标准SQL类型大小

integer/int https://www.doczj.com/doc/4a4624355.html,ng.Integer/int INTEGER 4字节

long https://www.doczj.com/doc/4a4624355.html,ng.Long/long BIGINT 8字节

short https://www.doczj.com/doc/4a4624355.html,ng.Short/short SMALLINT 2字节

byte https://www.doczj.com/doc/4a4624355.html,ng.Byte/byte TINYINT 1字节

float https://www.doczj.com/doc/4a4624355.html,ng.Float/float FLOAT 4字节

double https://www.doczj.com/doc/4a4624355.html,ng.Double/double DOUBLE 8字节

big_decimal java.math.BigDecimal NUMERIC

CHAR(1) 定长字符character https://www.doczj.com/doc/4a4624355.html,ng.Character/https://www.doczj.com/doc/4a4624355.html,ng.St

ring/char

string https://www.doczj.com/doc/4a4624355.html,ng.String VARCHAR 变长字符boolean/

https://www.doczj.com/doc/4a4624355.html,ng.Boolean/Boolean BIT 布尔类型

yes_no/true_false

date java.util.Date/java.sql.Date DATE 日期timestamp java.util.Date/java.util.Timestam TIMESTAMP 日期

p

calendar java.util.Calendar TIMESTAMP 日期calendar_date java.util.Calendar DATE 日期

binary byte[] BLOB BLOB

text https://www.doczj.com/doc/4a4624355.html,ng.String TEXT CLOB

BLOB BLOB serializable 实现java.io.Serializablej接口的任

意Java类

clob java.sql.Clob CLOB CLOB

blob java.sql.Blob BLOB BLOB

class https://www.doczj.com/doc/4a4624355.html,ng.Class VARCHAR 定长字符locale java.util.Locale VARCHAR 定长字符timezone java.util.TimeZone VARCHAR 定长字符currency java.util.Currency VARCHAR 定长字符

2、自定义映射类型

Hibernate提供了自定义映射类型接口,允许用户以编程的方式创建自定义的映射类型。用户自定义的映射类型需要实现https://www.doczj.com/doc/4a4624355.html,erType或https://www.doczj.com/doc/4a4624355.html,positeUserType接口。具体的创建自定义映射类型的方法请参考hibernate官方文档或相关资料,这里不再详细介绍。

Hibernate 实体关联关系映射----总结

https://www.doczj.com/doc/4a4624355.html,/62575/39279

Hibernate 实体关联关系映射----总结

花了三天的业余时间,终于写完了Hibernate关联关系映射的所有实例,感觉还应该总结一下。Hibernate映射关系错综复杂,在实际中真的都能用到吗?不用行吗?

在我看来,Hibernate提供这些映射关系,常用就是一对一和多对一,并且在能不用连接表的时候尽量不要用连接表。多对多会用到,如果用到了,应该首先考虑底层数据库设计是否合理。

在实际开发中,在Hibernate关联关系之外常常还有另外一种选择方案,表各自作为单表映射,业务逻辑控制外键关系(有时候就是一个相关联的列,但不一定要加外键约束),这样更加灵活,并且数据的完整性同样有保证。

当然,“单表映射,业务控制外键关系”并不是说Hibernate的实体关联功能是多余的,Hibernate 的实体关联的优点很多,随便拿本书都是讲优点,用好了会让开发人员感觉更方便,现在我也是两种方案结合使用。比如对于不很确定的两个实体,常常选用单表关联。

以前在初学Hibernate还没有完全搞清楚这些关联关系的时候,就是用单表映射,业务控制外键关系做的,发现没有任何问题,程序同样运行得很好。

看了这些是不是后悔浪费时间学习映射关系了?呵呵,Hibernate的OR Mapping是Hibernate的灵魂,我相信Hibernate的创始人比我们一般人的理解更深刻。只有学会了这些才能体会Hibernate设计者的思想。学一个东西,不光自己写代码,还应该能看懂别人的代码才行。因此系统学习这些关联映射还是大有必要的。

以上都是我自己的观点。欢迎在此交流讨论。

Hibernate在实际项目开发中,hbm.xml包括数据库脚本都是通过Xdoclet生成的,在此不采用Xdoclet的目的是为了便于理解这些映射模型。实体-数据表-映射文件三者对比看,太直观了。

瞌睡了,暂时先写到此,有新思路了再补上。。。。

Hibernate关联关系映射目录

├─单向关联

│├─一对一外键单向关联

│├─一对一主键单向关联

│├─一对一连接表单向关联

│├─一对多外键单向关联

│├─一对多连接表单向关联

│├─多对一外键单向关联

│├─多对一连接表单向关联

│└─多对多单向关联

└─双向关联

├─一对一外键双向关联

├─一对一主键双向关联

├─一对一连接表双向关联

├─一对多外键双向关联

├─一对多连接表双向关联

└─多对多双向关联

Hibernate 一对一外键单向关联

事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似。只需要将原来的many-to-one元素增加unique="true"属性,用于表示N的一端也必须是唯一的,在N的一端增加了唯一的约束,即成为单向1-1。基于外键的单向1-1的配置将与无连接表N-1关联的many-to-one增加unique="true"属性即可。

一、模型介绍

一个人(Person)对应一个地址(Address)。

二、实体(省略getter、setter方法)

public class Person11fk {

private int personid;

private String name;

private int age;

private Address11fk address11fk;

public class Address11fk {

private int addressid;

private String addressdetail;

三、表模型

mysql> desc address_11fk;

+---------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------------+--------------+------+-----+---------+----------------+

| addressid | int(11) | NO | PRI | NULL | auto_increment |

| addressdetail | varchar(255) | YES | | NULL | |

+---------------+--------------+------+-----+---------+----------------+

mysql> desc person_11fk;

+-----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-----------+--------------+------+-----+---------+----------------+

| personid | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(255) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

| addressId | int(11) | YES | UNI | NULL | |

+-----------+--------------+------+-----+---------+----------------+

四、生成的SQL脚本

CREATETABLE`address_11fk` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

PRIMARY KEY(`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

CREATETABLE`person_11fk` (

`personid` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

`age` int(11) default NULL,

`addressId` int(11) default NULL,

PRIMARY KEY(`personid`),

KEY`FK68A8818F3F45AA77` (`addressId`),

CONSTRAINT`FK68A8818F3F45AA77` FOREIGN KEY(`addressId`) REFERE NCES`address_11fk` (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

五、映射方法:

在Person中添加Address属性,映射配置为:

“1-1”-->

六、测试方法

publicclass Test_11fk {

public static void main(String[] args){

Person11fk p1=new Person11fk();

p1.setAge(21);

p1.setName("p1");

Address11fk add1=new Address11fk();

add1.setAddressdetail("郑州市经三路");

p1.setAddress11fk(add1);

Session session= HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

session.save(add1);

session.save(p1);

https://www.doczj.com/doc/4a4624355.html,mit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.推荐这么干!

session.save(add1);

session.save(p1);

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)

2) :正常保存.

session.save(p1);

session.save(add1);

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?) Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

Hibernate: update PERSON_11fk set name=?, age=?, addressId=? where personid=?

3) :正常保存.

// session.save(p1);

session.save(add1);

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

4) :发生异常,不能保存.

session.save(p1);

// session.save(add1);

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?) Exception in thread "main" org.hibernate.TransientObjectException:

https://www.doczj.com/doc/4a4624355.html,vasoft.dx._1_1_fk.Address11fk

Hibernate一对一主键单向关联

1-1的关联可以基于主键关联,但基于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成。另外,另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加constrained="true"属性,表明该类主键由关联类生成。

一、模型介绍

一个人(Person)对应一个地址(Address)。

二、实体(省略getter、setter方法)

public class Person11pk {

private int personid;

private String name;

private int age;

private Address11pk address11pk;

public class Address11pk {

private int addressid;

private String addressdetail;

三、表模型

mysql> desc address_11pk;

+---------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------------+--------------+------+-----+---------+----------------+

| addressid | int(11) | NO | PRI | NULL | auto_increment |

| addressdetail | varchar(255) | YES | | NULL | |

+---------------+--------------+------+-----+---------+----------------+

mysql> desc person_11pk;

+----------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| personid | int(11) | NO | PRI | | |

| name | varchar(255) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

+----------+--------------+------+-----+---------+-------+

四、生成的SQL脚本

/* Formatted on 2007/08/22 14:40 (QP5 v5.50) */

CREATE TABLE `address_11pk` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

PRIMARY KEY (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/22 14:41 (QP5 v5.50) */

CREATE TABLE `person_11pk` (

`presonid` int(11) NOT NULL,

`name` varchar(255) default NULL,

`age` int(11) default NULL,

PRIMARY KEY (`presonid`),

KEY `FK68A882C591BB393E` (`presonid`),

CONSTRAINT `FK68A882C591BB393E` FOREIGN KEY (`presonid`) REFERENCES `address_11pk` (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

五、映射方法:在Person中配置id生成策略为:

address11pk

......

address11pk

六、测试方法

public class Test_11pk {

public static void main(String[] args){

Person11pk p1=new Person11pk();

p1.setAge(21);

p1.setName("p1");

Address11pk add1=new Address11pk();

add1.setAddressdetail("郑州市经三路");

p1.setAddress11pk(add1);

Session session= HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

session.save(add1);

session.save(p1);

https://www.doczj.com/doc/4a4624355.html,mit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.推荐这么干!

session.save(add1);

session.save(p1);

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)

2) :正常保存.

session.save(p1);

session.save(add1);

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?) Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

Hibernate: update PERSON_11fk set name=?, age=?, addressId=? where personid=?

3) :正常保存.

// session.save(p1);

session.save(add1);

Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)

4) :发生异常,不能保存.

session.save(p1);

// session.save(add1);

Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)

Exception in thread "main" org.hibernate.TransientObjectException:

https://www.doczj.com/doc/4a4624355.html,vasoft.dx._1_1_fk.Address11fk

Hibernate一对一连接表单向关联

这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N-1的many-to-one元素增加unique="true"属性即可。

一、模型介绍

一个人(Person)对应一个地址(Address)。

二、实体(省略getter、setter方法)

public class Person11tab {

private int personid;

private String name;

private int age;

private Address11tab address11tab;

public class Address11tab {

private int addressid;

private String addressdetail;

三、表模型

mysql> desc address_11tab;

+---------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------------+--------------+------+-----+---------+----------------+

| addressid | int(11) | NO | PRI | NULL | auto_increment |

| addressdetail | varchar(255) | YES | | NULL | |

+---------------+--------------+------+-----+---------+----------------+

mysql> desc join_11tab;

+--------------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+--------------+---------+------+-----+---------+-------+

| personid | int(11) | NO | PRI | | |

| address11tab | int(11) | YES | UNI | NULL | |

+--------------+---------+------+-----+---------+-------+

mysql> desc person_11tab;

+----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(255) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

+----------+--------------+------+-----+---------+----------------+

四、生成的SQL脚本

/* Formatted on 2007/08/20 16:52 (QP5 v5.50) */

CREATE TABLE `join_11tab` (

`personid` int(11) NOT NULL,

`address11tab` int(11) default NULL,

PRIMARY KEY (`personid`),

UNIQUE KEY `address11tab` (`address11tab`),

KEY `FK6B44BE20C4CC3D33` (`address11tab`),

KEY `FK6B44BE209049BB1F` (`personid`),

CONSTRAINT `FK6B44BE209049BB1F` FOREIGN KEY (`personid`) REFERENCES `person_11tab` (`personid`),

CONSTRAINT `FK6B44BE20C4CC3D33` FOREIGN KEY (`address11tab`) REFERENCES

`address_11tab` (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/20 16:53 (QP5 v5.50) */

CREATE TABLE `address_11tab` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

PRIMARY KEY (`addressid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/20 16:53 (QP5 v5.50) */

CREATE TABLE `person_11tab` (

`personid` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

`age` int(11) default NULL,

PRIMARY KEY (`personid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

五、映射方法:在Person中添加Address属性,映射配置为:

六、测试方法

public class Test_11tab {

public static void main(String[] args){

Person11tab p1=new Person11tab();

p1.setAge(21);

p1.setName("p1");

Address11tab add1=new Address11tab();

add1.setAddressdetail("郑州市经三路");

p1.setAddress11tab(add1);

Session session= HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

session.save(add1);

session.save(p1);

https://www.doczj.com/doc/4a4624355.html,mit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.推荐这么干!

session.save(add1);

session.save(p1);

Hibernate: insert into ADDRESS_11tab (addressdetail) values (?) Hibernate: insert into PERSON_11tab (name, age) values (?, ?) Hibernate: insert into join_11tab (address11tab, personid) values (?, ?)

2) :正常保存.

session.save(p1);

session.save(add1);

Hibernate: insert into PERSON_11tab (name, age) values (?, ?)

Hibernate: insert into join_11tab (address11tab, personid) values (?, ?)

Hibernate: insert into ADDRESS_11tab (addressdetail) values (?)

Hibernate: update join_11tab set address11tab=? where personid=?

3) :正常保存.

// session.save(p1);

session.save(add1);

Hibernate: insert into ADDRESS_11tab (addressdetail) values (?)

4) :发生异常,不能保存.

session.save(p1);

// session.save(add1);

Hibernate: insert into PERSON_11tab (name, age) values (?, ?)

Hibernate: insert into join_11tab (address11tab, personid) values (?, ?)

Exception in thread "main" org.hibernate.TransientObjectException:

https://www.doczj.com/doc/4a4624355.html,vasoft.dx._1_1_tab.Address11tab

Hibernate一对多外键单向关联

这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N-1的many-to-one元素增加unique="true"属性即可。

一、模型介绍

一个人(Person)对应多个地址(Address),比如家庭地址、公司地址。

二、实体(省略getter、setter方法)

public class Person1nfk implements Serializable {

private int personid;

private String name;

private int age;

private Set addresses=new HashSet();

public class Address1nfk implements Serializable {

private int addressid;

private String addressdetail;

三、表模型

mysql> desc address_1nfk;

+---------------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------------+--------------+------+-----+---------+----------------+

| addressid | int(11) | NO | PRI | NULL | auto_increment |

| addressdetail | varchar(255) | YES | | NULL | |

| personid | int(11) | YES | MUL | NULL | |

+---------------+--------------+------+-----+---------+----------------+

mysql> desc person_1nfk;

+----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+----------------+

| personid | int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(255) | YES | | NULL | |

| age | int(11) | YES | | NULL | |

+----------+--------------+------+-----+---------+----------------+

四、生成的SQL脚本

/* Formatted on 2007/08/21 10:06 (QP5 v5.50) */

CREATE TABLE `address_1nfk` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

`addresses` int(11) default NULL,

PRIMARY KEY (`addressid`),

KEY `FK9B93456DC08D1667` (`addresses`),

CONSTRAINT `FK9B93456DC08D1667` FOREIGN KEY (`addresses`) REFERENCES `person_1nfk` (`personid`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/21 10:07 (QP5 v5.50) */

CREATE TABLE `person_1nfk` (

`personid` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

`age` int(11) default NULL,

PRIMARY KEY (`personid`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

五、映射方法:在实体类Person里面添加Address的集合,即可形成一对多关系。

Hibernate3.6(开发必看)

1.Java对象持久化概述 1.1.应用程序的分层体系结构 1.1.1.基于B/S的典型三层架构 说明: 1,展现层:提供与用户交互的界面。 2,业务逻辑层:实现各种业务逻辑。 3,数据访问层:负责存放和管理应用程序的持久化业务数据。 1.1. 2.数据访问层与Hibernate在Java应用程序中的 角色 数据访问层(持久化层)封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标: 1,代码重用性高,可完成所有的数据访问操作。 2,如果需要的话,能够支持多种数据库平台。 3,具有相对独立性,当持久化层变化时,不会影响上层实现。 在数据访问层(持久化层)中可以使用Hibernate框架以实现要求,如下图所示:

1.2.软件模型 1.2.1.各种模型的说明 概念模型: 模拟问题域中的真实实体。描述每个实体的概念和属性及实体间关系。不描述实体行为。实体间的关系有一对一、一对多和多对多。。 关系数据模型: 在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构。有以下内容组成:1,若干表 2,表的所有索引 3,视图 4,触发器 5,表与表之间的参照完整性

域模型: 在软件的分析阶段创建概念模型,在软件设计阶段创建域模型。 组成部分: 1,具有状态和行为的域对象。 2,域对象之间的关联。 域对象(domain object): 构成域模型的基本元素就是域对象。对真实世界的实体的软件抽象,也叫做业务对象(Business Object,BO)。域对象可代表业务领域中的人、地点、事物或概念。 域对象分为以下几种: 1,实体域对象:通常是指业务领域中的名词。(plain old java object,简单Java 对象)。 2,过程域对象:应用中的业务逻辑或流程。依赖于实体域对象,业务领域中的动词。如发出订单、登陆等。 3,事件域对象:应用中的一些事件(警告、异常)。 1.2.2.域对象间的关系 关联: 类间的引用关系。以属性定义的方式表现。

Hibernate配置文件的DTD

Hibernate中有两个配置文件 映射文件Xxx.hbm.xml 映射文件的的文件头DTD文件内容:

配置文件hibernate.cfg.xml 配置文件的文件头DTD文件内容: org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost/minmin?characterEncoding=gb2312 root minmin true create

Hibernate练习题

Hibernate&EJB考试试题 1、下面关于Hibernate说法正确的是()(选择两项) A)Hibernate是ORM的一种实现方式 B)Hibernate不要JDBC的支持 C)属于控制层 D)属于数据持久层 2、下面关于ORM的说法错误的是()(选择两项) A)对象关系映射,让现实中的对象同数据库的表产生映射(类与表产生映射) B)对象关系映射,让类同表产生关系 C)对象关系映射,让类同记录产生关系(类的实例与记录(表中的一行数据)产生关系) D)对象关系映射,让类中的属性同表中的列产生关系 3、下面关于Hibernate中Session的说法正确的是()(选择两项) A)Session是轻量级的,可以随意的创建和销毁 B)Session是重量级的,不能随意的创建和销毁 C)Session是线程安全的 D)Session不是线程安全的 4、在Hibernate中,以下()不属于session的方法 A、close() B. open() C. update() D. delete() 5、下面关于Hibernate中load和get方法说法正确的是() A)这两个方法是一样的,没有任何的区别 B)这两个方法不一样,load先找缓存,再找数据库

C)这两个方法不一样,get先找缓存,再找数据库 D)以上说法都不对 注:load()和get()都是先找缓存,再找数据库。 不同点是在检索时: load()是延迟检索,先返回代理对象,访问对象时在发出sql命令Get()是立即检索,直接发出sql命令,返回对象 6、在Hibernate中修改对象的说话错误的是() A)只能利用update方法来做修改 B)可以利用saveOrUpdate方法来做修改 C)可以利用HQL语句来做修改 D)不能利用HQL语句来修改 7、下面关于Hibernate中Transaction的使用说法正确的是()(选择两项) A)Transaction是可有可无的 B)Transaction在做查询的时候是可有可无的 C)Transaction在做修改的时候是可有可无的 D)Transaction在做修改的时候是必须的 8、使用Hibernate技术实现数据持久化时,下面()内容不在 Hibernate配置文件中配置(选择一项) A) 数据库连接信息 B) 数据库类型(dialect) C) show_sql参数 D) 数据库表和实体的映射信息

spring4.x + hibernate4.x 配置详解

spring4.x + hibernate4.x 配置详解 关于spring和hibernate的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜索一下即可。 本篇博文的内容主要是我最近整理的关于spring4.x 和hibernate 4.x 相关配置和使用方式,当然spring3.x以及hibernate4.x也可以借鉴。 首先是配置文件web.xml 增加以下代码即可 contextConfigLocation classpath*:/applicationContext.xml org.springframework.web.context.ContextLoaderListener 然后建立 applicationContext.xml 文件,src下。文件内容如下,注释我尽量写的很详细 org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql:///hibernatedemo root yzp140103 这样就配置好了。 接下来,要做的就是做开发测试了:在项目的src目录下新建一个实体类包com.joe.entity,在该包下新建一个实体类Student,代码如下: package com.joe.entity; import java.io.Serializable;

Mysql Hibernate Spring 的配置及jdbc连接简单程序

Mysql Hibernate Spring 的配置

用MyEclipse如何自动生成hibernate的.hbm.xml文件

用MyEclipse如何自动生成hibernate的.hbm.xml文件(2010-07-29 17:36:01) 今天在网上看到很多人都不知道怎么用MyEclipse自动生成hibernate的.hbm.xml文件。我甚至看到有位兄弟竟然自己写出那个格式的文件来。首先我不得不佩服那位兄弟的记忆力。可是我这边有更直接的方法希望能对那些入门级别的人一点帮助! 在hibernate中,每个数据表对应的其实是一个实体类,每个实体类有一个对应的hbm.xml 配置文件和你匹配,myeclipse中其实有个MyEclipse Database Explorer视图,它提供了myeclipse与数据库直接连接的内置窗口,并且通过此窗口可以生成hibernate的mapping文件。 1.在项目上点击右键选择MyEclipse选项,为应用增加Hibernate特性. 2.在出现的配置窗口中,选中“Add Hibernate 2.1 libraries to project?”,然后设定存放Hibernate 库文件的目录为:/WEB-INF/lib 目录,默认会选择创建一个新的Hibernate配置文件hibernate.cfg.xml。 3.点击下一步,进入Hibernate数据库连接配置界面,在Connection Profile选项中直接选择在MyEclipse Database Explorer中配置的vipdata选项,然后就会自动生成其他的配置,可以选择“Copy JDBC Driver and add to classpath”,这样就会将JDBC驱动拷贝到WEB-INF/lib目录中。: 4.点击下一步,来创建Hibernate的SessionFactory类,这是一个简单的集中管理Hibernate 会话的工厂类,填写类的全名称。 5.点击完成,然后MyEclipse就会将Hibernate相关的jar包拷贝到lib目录下,同时会生成Hibernate的配置文件:hibernate.cfg.xml,和SessionFactory类。 现在要利用MyEclipse Database Explorer视图中的工具来生成Hibernate的映射文件。切换到MyEclipse Database Explorer视图,在表vipdata上点击右键,选择Create Hibernate Mapping.

Hibernate(V)——一对多与多对多关联关系映射(xml与注解)总结

Hibernate(6)——一对多和多对多关联关系映射(xml和注解)总结 涉及的知识点总结如下: ?One to Many 映射关系 o多对一单向外键关联(XML/Annotation) o一对多单向外键关联(XML/Annotation) o懒加载和积极加载 o一对多双向外键关联(XML/Annotation) ?Many to Many 映射关系 o多对多单向外键关联(XML/Annotation) o多对多双向外键关联(XML/Annotation) o set的inverse元素详解 ?问题小结 ?关联关系的优缺点 多对一单向外键关联关系 注意多对一关联是多方持有一方的引用。看一个例子,去淘宝购物,那么一个淘宝用户可以对应多个购物订单,如图所示: 多的一方是Orders,持有一方的引用,也就是Users,而在Users中无需作任何定义,从订单到用户的关系是单向多对一关联。对应数据库就是: 还有比如说学生和班级的关系,多个学生可以属于同一个班级,这就是从学生到班级也是典型的单向多对一关系,看代码实现: 基于注解的多对一单向外键关联: 单向多对一关联中,多方需要持有一方的引用,那么多方(学生类)需要额外配置,需要对持有的一方引用使用注解@ManyToOne (cascade={CascadeType.ALL}, fetch=FetchType.EAGER),设置为级联操作和饥渴的抓取策略,@JoinColumn(name="cid"),而一方(教室类)无需做任何多方的定义。 注意;多方必须保留一个不带参数的构造器! import ; import ; import ; //班级类,在多对一关系中属于一的方,不持有其他多余的配置,反而是被多方持有

如何根据hibernate的实体类和实体类配置文件生成数据库的表

网络地址: 主题:如何根据hibernate的实体类和实体类配置文件生成数据库的表 内容部分 [c-sharp]view plaincopyprint? 1. 4. 5. 6. jdbc:mysql://12 7.0.0.1/lianxi 7. com.mysql.jdbc.Driver 8. root 9. root 10. org.hibernate.dialect.MySQLDialect 11. true 12. update 13. 14. 15. 16. 17. 18. 19.

hibernate配置数据库连接池的三种方法

?数据库连接池的概念(是什么,做什么用的,有什么好处) ?首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了。?以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放。如果频繁的数据库操作,就会导致性能很低。连接池的出现,为开发过程提供了一个很好的管理平台。当程序中需要建立数据库连接时,只须从内存中取一个来用而不用新建。同样,使用完毕后,只需放回内存即可。而连接的建立、断开都有连接池自身来管理。同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。通过使用连接池,将大大提高程序效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。 ?而Hibernate的出现把连接池的使用引入了一个新的利用方式,让你充分享受配置化给开发带来的便利。 1 C3P0 (以验证可用) 只需在hibernate.cfg.xml中加入 omdssd_admin omdssd_hskj jdbc:oracle:thin:@10.142.1.138:1521:omds oracle.jdbc.driver.OracleDriver org.hibernate.dialect.Oracle9Dialect true true oracle10g_112 org.hibernate.connection.C3P0ConnectionProvider 5 //连接池中数据库连接的最小数目 30 //连接池中数据库连接的最大数目 1800 //设定数据库连接的过期时间,以秒为单位 50 //可以被缓存的PreparedStatement实例的最大数目。缓存适量的PreparedStatement实例,能够大大提高Hibernate的性能。 120//在使数据库连接自动生效之前处于空闲状态的时间,以秒为单位

Eclipse下配置和使用Hibernate Tools

Eclipse下配置和使用Hibernate Tools 文章分类:Web前端关键字: hibernate tools eclipse 插件配置 Hibernate Tools可以通过访问已经建立好的数据库以反向工程方式生成POJO文件。 今天就来说一下如何使用Hibernate Tools来生成POJO。 1、首先,要去Hibernate的网站下载这个工具包。一个大约14M的ZIP压缩文件。 https://www.doczj.com/doc/4a4624355.html,/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R200810311334.zip 2、解压缩下载好的文件,释放出features和plugins这两个文件夹和其中的内容。完成后将这两个文件夹复制到Eclipse的目录下(这两个文件夹在Eclipse中是默认存在的,直接复制就行了)。 3、到这步为止HibernateTools的安装就算结束了,下面开始配置和具体使用。一开始选择工程下的SRC 目录,然后右键New->Other->Hibernate->Hibernate Configuration File(cfg.xml),在弹出的窗口中选择Next ,进入到下面的选项中。 注意,这个地方有几项是一定要填写的。他们分别是Database dialect(数据库方言)、Driver class(数据库驱动)、Connection URL(链接字符串)以及Username和Password(访问数据库的用户名和密码)。

上图图中使用的是MySQL5数据库的配置,vane是我机器中已经创建好的数据库。使用其他数据库的时候会略有不同。 填好之后选择Finish。 4、选择Eclipse的下拉菜单Window->Show View->Other->Hibernate->Hibernate Configurations,现在就可以查看Hibernate的配置窗口了。在窗口中单击右键Add Configuration,出现Edit Configuration窗口。 这里需要给Configuration起个名字,然后在Project项目中选择当前工程。 单击OK。 5、如果上一步的配置是正确的,那么在Hibernate的配置窗口中就可以看见Hibernate访问数据库得到的数据信息。

Hibernate HQL 语法大全

Hibernate HQL 语法大全HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。1.大小写敏感性问题 除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以SeLeCT 与 sELEct 以及 SELECT 是相同的,但是 org.hibernate.eg.FOO 并不等价于 org.hibernate.eg.Foo 并且foo.barSet 也不等价于 foo.BARSET。 本手册中的HQL关键字将使用小写字母. 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强, 但我们发现,当把查询语句嵌入到Java语句中的时候使用大写关键字比较难看。 2.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat 该子句简单的返回eg.Cat类的所有实例。通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况。所以我们几乎只使用如下的简单写法: from Cat 大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到Cat from Cat as cat 这个语句把别名cat指定给类Cat 的实例, 这样我们就可以在随后的查询中使用此别名了。关键字as 是可选的,我们也可以这样写: from Cat cat 子句中可以同时出现多个类, 其查询结果是产生一个笛卡儿积或产生跨表的连接。 from Formula, Parameter from Formula as form, Parameter as param 查询语句中别名的开头部分小写被认为是实践中的好习惯, 这样做与Java变量的命名标准保持了一致 (比如,domesticCat)。 3.关联(Association)与连接(Join) 我们也可以为相关联的实体甚至是对一个集合中的全部元素指定一个别

hibernate关系映射注解配置

1. Hibernate Annotation关系映射有下面几种类型: 1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要,有需要看下文档即可) 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。 因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了 4)多对一关联映射(单向) 5)一对多关联映射(单向) 6)一对多关联映射(双向) 7)多对多关联映射(单向) 8)多对多关联映射(双向) 2.介绍各种映射用法 1)一对一外键关联映射(单向)Husband ---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} … } public class Wife{ } 一对一外键关联,使用@OneToOne,并设置了级联操作 @JoinColum设置了外键的名称为wife_id(数据库字段名),如果不设置,则默认为另一类的属性名+ _id 外键的值是唯一的(unique),不可重复,与另一类的主键一致 2)一对一外键关联映射(双向)Husband <---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} ... } public class Wife{ private Husband husband; @OneToOne(mappedBy="wife",cascade=CascadeType.ALL) public Husband getHusband(){…} ... } 一对一双向关联关系,使用@OneToOne 注意:需要加上mappedBy="wife",如果不加上的话,Wife也会生成一个外键(husband_id)。mappedby="wife"需要指向与他关联对象的一个属性(即Husband类里面的wife属性),这里的会在Husband表里面生成个外键wife_id字段,而Wife表里则不会生成。这里Husband作为维护端即主

利用轻量对象关系映射技术Hibernate提高开发效率

利用轻量对象关系映射技术Hibernate提高开发效率 Enhancing Development Efficiency with Hibernate a Lightweight Object/Relational Mapping Technology 谢挺 周维民 (上海大学机电工程与自动化学院,上海 200072) 摘 要 Hibernate是一种轻量对象关系映射技术。文章通过实例,介绍了Hibernate的一些关键特性,并阐述了该技术的一些局限性。 关键词 Hibernate 对象关系映射企业级JavaBeans 持久化 Abstract Hibernate is a lightweight Object/Relational Mapping(ORM) technology. Some key features of Hibernate are illustrated, and some limits of this technology are expounded. Keywords Hibernate Object/Relational Mapping (ORM) EJB Permanence 0 引言 随着internet的发展,应用服务程序已经从集中式、C/S模式过渡到B/S、分布式模式;无论是用户或是供应商都迫切希望缩短开发周期、提高开发效率,Hibernate应运而生。 1 Hibernate简介 Hibernate是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(Object/Relational Mapping , ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型中去。 Hibernate不仅提高Java类到数据库的映射,还提供数据查询和获取数据的方法。Hibernate在英语中的意思是“冬眠”,顾名思义它使得商务逻辑的开发和数据库最大程度地分离,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是解放开发者通常与数据持久化相关的编程任务的95%。对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是很有用的。 图1是Hibernate的体系结构图,从图中可以Array看到,系统为3层B/S模式,应用程序在客户端运 行将持久化的对象交由Hibernate。Hibernate通过 properties属性设置和XML Mapping实现商务逻 辑,调用和存储低层数据库后将返回的结果送给 客户端。 Hibernate对每一种数据库都有对应的 Dialect进行操作优化,从而提高它在各种情况 下的效率。目前,它的版本为3.0、支持的数据 库有Oracle、DB2、MySQL、PostgreSQL、Sybase,Interbase、Pointbase、Microsoft SQL Server、

hibernate教程

一、使用Hibernate的3个准备和7个步骤 准备1:导入Hibernate库(jar包); 准备2:添加配置文件-Hibernate.cfg.xml jdbc:microsoft:sqlserver://localhost:1433;Database=zf sa pwd com.microsoft.jdbc.sqlserver.SQLServerDriver #配置数据库链接 org.hibernate.dialect.SQLServerDialect #数据库方言 true #设置运行时是否在控制台显示SQL语句 #映射文件,可以有多个 准备3:添加实体类和映射文件(User.hbm.xml) 类: public class User implements java.io.Serializable { //要实现Serializable private Integer uid; private String uname; private String upass; public User(){// 要有默认构造方法 } // Getter and setter } User.hbm.xml: 列名

Hibernate映射解决问题

Hibernate映射解决问题 做Hibernate映射已经做了五天了,期间遇到了不少错误,有的时候错误很细小,很难发现.现在就来总结一下,常见的错误,有的也是在网上搜了看到的! 第一种问题:Could not execute JDBC batch update 网上说有两种可能: 1.因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了 2.估计是你的列名里面有关键字的原因吧,命名列的时候不要单独使用date,ID...这种关键字 但是,我觉得他写得不完全啦!我遇到的就不是两种原因,而是List映射时,对应表的索引项没有设成主键,所以就出错了.虽然找了蛮长时间的.同样, 它也会出现Duplicate entry '1' for key 1的错误啦! 第二种问题(归纳下): 1.Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence. 如果出现这行错误说明你的XML配置文件有不规范的字符,检查下。 2.net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml 如果出现这行错误说明你的hibernate的XML配置文件有错 3.net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found 如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,一般跟同名的java持久化类放在一起,也就是跟Hello_Bean.class类文件一起。4.net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean 如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.Java类里的getXXX 或setXXX方法不一致。 5.net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver:没有找到数据库驱动程序 6.The database return no natively generate indentity value。主键没有添加增量 7.net.sf.hibernate.PropertyValueException:not-null property references a null or transient value:com.pack.Rordercontent. 异常产生原因:Rordercontent对象的非空属性Rordertable引用了一个临时对象。 8.net.sf.hibernate.TransientobjectException:objiect references an unsaved transient instance –save the transient instance before flushing: com.pack.Rordertable 持久化对象的某个属性引用了一个临时对象Rordertable https://www.doczj.com/doc/4a4624355.html,.sf.hibernate.MappingException

相关主题
文本预览
相关文档 最新文档