搜档网
当前位置:搜档网 › hibernate实体类关系

hibernate实体类关系

hibernate实体类关系
hibernate实体类关系

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的集合,即可形成一对多关系。

table="ADDRESS_1nfk"

cascade="all"

>

table="ADDRESS_1nfk"

cascade="all"

>

六、测试方法

public class Test_1nfk {

public static void main(String[] args){

Address1nfk add1=new Address1nfk();

Address1nfk add2=new Address1nfk();

Person1nfk p=new Person1nfk();

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

add2.setAddressdetail("合肥市宿州路");

p.setName("wang");

p.setAge(30);

p.getAddresses().add(add1);

p.getAddresses().add(add2);

Session session= HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

session.save(add1);

session.save(add2);

session.save(p);

https://www.sodocs.net/doc/da16009492.html,mit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.

// session.save(add1);

// session.save(add2);

session.save(p);

Hibernate: insert into PERSON_1nfk (name, age) values (?, ?) Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?) Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?) Hibernate: update ADDRESS_1nfk set personid=? where addressid=? Hibernate: update ADDRESS_1nfk set personid=? where addressid=?

2) :正常保存.

session.save(add1);

session.save(add2);

session.save(p);

Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?) Hibernate: insert into ADDRESS_1nfk (addressdetail) values (?) Hibernate: insert into PERSON_1nfk (name, age) values (?, ?) Hibernate: update ADDRESS_1nfk set personid=? where addressid=? Hibernate: update ADDRESS_1nfk set personid=? where addressid=?

3) :正常保存.

session.save(add1);

session.save(add2);

// session.save(p);

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

Hibernate 一对一外键双向关联

一对一外键关联是一对多外键关联的特例,只是在多的一方加了个唯一性约束。

一、模型

一个人对应一个地址。

/*==============================================================*/ /* DBMS name: MySQL 5.0 */

/* Created on: 2008-12-9 0:12:54 */

/*==============================================================*/

drop table if exists address;

drop table if exists person;

/*==============================================================*/ /* Table: address */

/*==============================================================*/ create table address

(

id bigint not null auto_increment comment 'ID',

detail varchar(120) not null comment '详细地址',

personid bigint comment '人的ID',

primary key (id)

)

type = InnoDB;

alter table address comment '地址';

/*==============================================================*/ /* Table: person */

/*==============================================================*/ create table person

(

id bigint not null auto_increment comment 'ID',

name varchar(24) not null comment '姓名',

primary key (id)

)

type = InnoDB;

alter table person comment '人';

alter table address add constraint FK_Reference_4 foreign key (personid)

references person (id) on delete restrict on update restrict;

二、对象模型

publicclass Person implements java.io.Serializable {

private Long id;

private String name;

private Address address;

publicclass Address implements java.io.Serializable {

private Long id;

private Person person;

private String detail;

三、映射文件

"https://www.sodocs.net/doc/da16009492.html,/hibernate-mapping-3.0.dtd">

姓名

"https://www.sodocs.net/doc/da16009492.html,/hibernate-mapping-3.0.dtd">

详细地址

fetch="select"unique="true">

人的ID

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

"https://www.sodocs.net/doc/da16009492.html,/hibernate-configuration-3.

0.dtd">

root

jdbc:mysql://localhost:3306/testdb

org.hibernate.dialect.MySQLDialect

xiaohui

com.mysql.jdbc.Driver

true

true

四、测试

import org.hibernate.Transaction;

import entity.Address;

import entity.Person;

import utils.HibernateSessionFactory;

publicclass Test {

public static void main(String[] args) {

savePerson();

}

public static void savePerson() {

Person person = new Person("张三");

Address address = new Address("XX街X号");

person.setAddress(address);

address.setPerson(person);

Session session = HibernateSessionFactory.getSession();

Transaction tx = session.beginTransaction();

session.save(person);

https://www.sodocs.net/doc/da16009492.html,mit();

}

}

运行日志:

Hibernate:

insert

into

person

(name)

values

(?)

Hibernate:

insert

into

testdb.address

(detail, personid)

values

(?, ?)

Hibernate一对多外键双向关联

一、模型介绍

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

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

public class Person1nfk_sx implements Serializable {

private int personid;

private String name;

private int age;

private Set addresses=new HashSet();

public class Address1nfk_sx implements Serializable {

private int addressid;

private String addressdetail;

private Person1nfk_sx person1nfkSx;

三、表模型

mysql> desc person_1nfk_sx;

+----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra |

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

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

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

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

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

mysql> desc address_1nfk_sx;

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

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

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

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

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

| personid | int(11) | NO | MUL | | |

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

四、生成的SQL脚本

/* Formatted on 2007/08/22 17:42 (QP5 v5.50) */

CREATE TABLE `address_1nfk` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

`personid` int(11) default NULL,

PRIMARY KEY (`addressid`),

KEY `FK9B93456DA6D6C1F5` (`personid`),

CONSTRAINT `FK9B93456DA6D6C1F5` FOREIGN KEY (`personid`) REFERENCES `person_1nfk` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/22 17:42 (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 DEFAULT CHARSET=gbk;

五、映射方法

class="https://www.sodocs.net/doc/da16009492.html,vasoft.sx._1_n_fk.Person1nfk_sx"

fetch="select"

cascade="save-update">

六、测试方法

public class Test_1nfk_sx {

public static void main(String[] args){

Address1nfk_sx add1=new Address1nfk_sx();

Address1nfk_sx add2=new Address1nfk_sx();

Person1nfk_sx p=new Person1nfk_sx();

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

add2.setAddressdetail("合肥市宿州路");

p.setName("wang");

p.setAge(30);

p.getAddresses().add(add1);

p.getAddresses().add(add2);

add1.setPerson1nfk(p);

add2.setPerson1nfk(p);

Session session= HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

session.save(p);

session.saveOrUpdate(add1);

session.saveOrUpdate(add2);

https://www.sodocs.net/doc/da16009492.html,mit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.

session.save(p);

session.saveOrUpdate(add1);

session.saveOrUpdate(add2);

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

Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?) Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)

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.sodocs.net/doc/da16009492.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.sodocs.net/doc/da16009492.html,vasoft.dx._1_1_tab.Address11t

Hibernate一对一连接表双向关联

一、模型介绍

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

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

public class Person11tab_sx {

private int personid;

private String name;

private int age;

private Address11tab_sx address11tab_sx;

public class Address11tab_sx {

private int addressid;

private String addressdetail;

private Person11tab_sx person11tab_sx;

三、表模型

mysql> desc person_11tab_sx;

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

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

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

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

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

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

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

mysql> desc join_11tab_sx;

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

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

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

| addressid | int(11) | NO | UNI | | |

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

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

mysql> desc address_11tab_sx;

+---------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra |

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

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

+---------------+--------------+------+-----+---------+----------------+四、生成的SQL脚本

/* Formatted on 2007/08/22 17:35 (QP5 v5.50) */

CREATE TABLE `person_11tab_sx` (

`personid` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

`age` int(11) default NULL,

PRIMARY KEY (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/22 17:34 (QP5 v5.50) */

CREATE TABLE `address_11tab_sx` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

PRIMARY KEY (`addressid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/22 18:35 (QP5 v5.50) */

CREATE TABLE `join_11tab_sx` (

`addressid` int(11) NOT NULL,

`personid` int(11) NOT NULL,

PRIMARY KEY (`personid`),

UNIQUE KEY `addressid` (`addressid`),

UNIQUE KEY `personid` (`personid`),

KEY `FKF4AA80E44327AAB6` (`personid`),

KEY `FKF4AA80E460C0C9F0` (`addressid`),

CONSTRAINT `FKF4AA80E460C0C9F0` FOREIGN KEY (`addressid`) REFERENCES

`address_11tab_sx` (`addressid`),

CONSTRAINT `FKF4AA80E44327AAB6` FOREIGN KEY (`personid`) REFERENCES `person_11tab_sx` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

五、映射方法

optional="true">

unique="true"/>

column="addressid"

not-null="true"

unique="true"/>

optional="true"

inverse="true">

unique="true"/>

not-null="true" unique="true"/>

六、测试方法

public class Test_11tab_sx {

public static void main(String[] args){

Address11tab_sx add = new Address11tab_sx();

Person11tab_sx p = new Person11tab_sx();

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

p.setAge(12);

p.setName("wudalang");

add.setPerson11tab_sx(p);

p.setAddress11tab_sx(add);

Session session = HibernateUtil.getCurrentSession();

Transaction tx = session.beginTransaction();

session.saveOrUpdate(p);

session.saveOrUpdate(add);

https://www.sodocs.net/doc/da16009492.html,mit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.

session.saveOrUpdate(p);

session.saveOrUpdate(add);

Hibernate: insert into PERSON_11tab_sx (name, age) values (?, ?) Hibernate: insert into ADDRESS_11tab_sx (addressdetail) values (?) Hibernate: insert into join_11tab_sx (addressid, personid) values (?, ?)

Hibernate一对多连接表单向关联

一、模型介绍

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

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

public class Person1ntab {

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 join_1ntab;

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

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

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

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

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

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

mysql> desc person_1ntab;

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

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

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

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

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) 数据库表和实体的映射信息

持续集成测试

一、概念引入 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。 在敏捷开发中,有一个很重要的实践叫做持续集成。而什么是持续集成呢?简单来说,持续集成是频繁、持续的在多个团队成员的工作中进行集成,并且给与反馈。一个典型的持续集成周期包括以下几个步骤: 1.持续集成服务器不断从版本控制服务器上检查代码状态,看代码是否有 更新。 2.如果发现代码有最新的提交,那么就从版本控制服务器下载最新的代码。 3.等代码完全更新以后,调用自动化编译脚本,进行代码编译。 4.运行所有的自动化测试。 5.进行代码分析。 6.产生可执行的软件,能够提供给测试人员进行测试。 测试是持续集成流程中重要的一环,也是区别去传统的软件开发流程中的一个重要的标志。为什么要有持续集成测试呢? 每天,程序开发人员将各自开发的代码上传到配置管理工具(如SVN、VSS)中,而配置管理工具会记录下谁在什么时间上传了什么代码文件。随后,持续集成工具会定期(可以是几个小时、半天,或者一天,由使用者自己定义)向配置管理工具询问,从上一周期到现在是否有代码上传。如果有,则下载到持续集成工具中进行集成。之后,持续集成工具会调用构建工具代码编译、自动化测试,以及执行静态代码检查。如果这几项工作执行成功,则打包复制到应用服务器(如Weblogic)上执行重新发布,并形成代码检查与测试等报告;如果执行失败,则及时通过邮件通知管理者,并记录相关日志。 配置管理工具 毫无疑问,配置管理工具对持续集成工具来说是绝顶重要的,它是所有最新代码的来源。持续集成工具会定期向配置管理工具询问代码是否有更新。只有有了更新,持续集成工具才会去完成后续的工作,否则就没有了意义。目前在Java开发项目中,最主流的无疑是Subversion(简称SVN)。SVN是对CVS的升级,它通过插件的形式被集成到开发工具中,并且提供了更加方便的上传下载操作,使开发人员最厌恶的上传下载操作变得简便。SVN的另一个巨大贡献是改变了VSS 那样的串行修改模式。众所周之,VSS的版本管理思路就是串行修改模式,即对于同一个文件只能一个人修改,其他人不能修改。这样的模式对应大规模团队开发来说无疑是非常蹩脚的。SVN改变了这种模式,同一个文件可以多人并行操作,但同时SVN又提供了强大的版本冲突处理机制,当并行操作的多人各自提交版本时,通过版本冲突处理机制可以顺利的合并版本,使最终形成统一版本。

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 HQL 语法 及相关的外键关联

Hibernate HQL 语法及相关的外键关联 例如对于TUser类 1.实体查询 String hql = " from User"; 执行这条语句会返回User以及User子类的纪录。 注: 如果 TUser 类具有外键, 查询结果不会报错,但结果中的外键为空值,访问就报空指针错误! 解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错! //此方法不一定能解决,但不会错. hql = "from https://www.sodocs.net/doc/da16009492.html,ng.Object" 会返回数据库中所有库表的纪录。 where 语句,as可以省略 hql = "from User as user where https://www.sodocs.net/doc/da16009492.html,='yyy'"; //https://www.sodocs.net/doc/da16009492.html,为类的属性 hql = "from User user where https://www.sodocs.net/doc/da16009492.html,='yyy'";

where子句中,我们可以通过比较运算符设定条件,如: =, <>, >, <, >=, <=, between XX and XX, not between, in (xx,xx), not in, is, like %XX% 等。 2.属性查询 (1)List list = session.createQuery("select https://www.sodocs.net/doc/da16009492.html,, user.age from User user").list(); 还可以在HQL中动态构造对象实例的方法,将数据封装。 (2)List list = session.createQuery("select new User(https://www.sodocs.net/doc/da16009492.html,, user.age) from TUser as user").list(); Iterator it = list.iterator(); while(it.hasNext() ) { User user = (User)it.next(); System.out.println(user.getName()); } 但是要注意这里的User对象只是对name和age属性的封装,其他状态均未赋值,所以不能用它来进行更新操作。 也可以在HQL的Select子句中使用统计函数 "select count(*) ,min(user.age) from User as user"

hibernate面试题

1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2.Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4.说下Hibernate的缓存机制 1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据 c) 第三方缓存的实现

hibernate各种关联关系

一、多对一关联映射 会在多的一端加入一个外键,指向一的一端,这个外键是由 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致 标签的定义示例: * 二、一对一主键关联 1、一对一主键关联单向 t_user id | name | groupid 1 | 菜10 | 1 2 | 容祖儿| 1 t_group id | name 1| 尚学堂 t_person id | name 1| 菜10 2| 容祖儿 t_idcard id | cardNo 1 | 8888888888 2 | 9999999999

hibernate 一对一主键关联映射(单向关联Person---->IdCard ) 一对一主键关联映射:让两个实体对象的id 保持相同,这样可以避免多余的字段被创建 具体映射: idCard 2、一对一主键关联双向 hibernate 一对一主键关联映射(双向关联Person<---->IdCard ) 需要在idcard 映射文件中加入标签指向person ,指示hibernate 如何加载person 默认根据主键加载 t_person id | name 3 | 菜10 4 | 容祖儿 t_idcard id | cardNo 1 | 8888888888 2 | 9999999999

JAVA复试问题答案

(一) JAVA复试的问题整理 1 Hibernate 的优化流程是如何实现的,流程是怎么样? 1.尽量使用many-to-one,避免使用单向one-to-many 2.灵活使用单向one-to-many 3.不用一对一,使用多对一代替一对一 4.配置对象缓存,不使用集合缓存 5.一对多使用Bag 多对一使用Set 6.继承使用显示多态 HQL:from object polymorphism="exlicit" 避免查处所有对象 7.消除大表,使用二级缓存 2 Struts1与Struts2的区别? 在Action 实现类方面的对比:Struts 1 要求Action 类继承一个抽象基类;Struts 1 的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action 类可以实现一个Action 接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2 提供一ActionSupport 基类去实现常用的接口。即使 Action 接口不是必须实现的,只有一个包含execute 方法的POJO 类都可以用作 Struts 2 的Action 。 线程模式方面的对比:Struts 1 Action 是单例模式并且必须是线程安全的,因为仅有Action 的一个实例来处理所有的请求。单例策略限制了Struts 1 Action 能做的事,并且要在开发时特别小心。Action 资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Servlet 依赖方面的对比:Struts 1 Action 依赖于 Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。Struts 2 Action 不再依赖于 Servlet API,从而允许Action 脱离Web 容器运行,从而降低了测试Action 的难度。当然,如果Action 需要直接访问HttpServletRequest 和HttpServletResponse 参数,Struts 2 Action 仍然可以访问它们。但是,大部分时候,Action 都无需直接访问HttpServetRequest 和HttpServletResponse,从而给开发者更多灵活的选择。 可测性方面的对比:测试Struts 1 Action 的一个主要问题是execute 方法依赖于Servlet API,这使得Action 的测试要依赖于Web 容器。为了脱离Web 容器测试 Struts1

用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关联关系简单总结

一对一关系 主键关联(夫妻表) 表t_husband pk_id f_name po对象 public class HusbandPO private int id; private String name; private WifePO myWife; hibernate配置 表t_wife Pk_id f_name Po对象 public class WifePO private int id; private String name; private HusbandPO myMan; hibernate配置 myMan

HQL 查询

Hibernate提供了强大的查询系统,使用Hibernate有多种查询方法可以选择:可以使用Hibernate的HQL查询,也可以使用条件查询,甚至可以使用原生的SQL 查询语句。其中HQL查询时Hibernate配置的功能强大的查询语句。HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。 一、HQL查询 HQL的语法和SQL很相似,但是HQL是一种面向对象的查询语句,它的操作对象是类、实例、属性等,而SQL的操作对象是数据表、列等数据库对象。 由于HQL是完全面向对象的查询语句,因此可以支持继承、多态等特性。 HQL查询依赖于Query类,每一个Query实例对应一个查询对象,它的执行是通过Session的createQuery()方法来获得的。 执行HQL查询的步骤: 1、获得Hibernate Session对象 2、编写HQL语句 3、调用Session的createQuery方法创建查询对象 4、如果HQL语句包含参数,则调用Query的setXxx方法为参数赋值 5、调用Query对象的list等方法返回查询结果。 实例: 上面的程序先编写HQL语句后,使用Session的createQuery(hql)方法创建一个Query,Query对象使用setXxx方法为HQL语句的参数赋值,最后调用list()方法返回查询的全部结果。 在这里Query对象可以连续多次调用setXxx方法为HQL参数赋值。这是因为Hibernate Query的setXxx方法的返回值为Query本身,因此程序创建Query后,可以直接多次调用setXxx方法为HQL语句的参数赋值。

Java应用数据库:Hibernate对多表关联查询

执行救济竞合的实务把握 周玉和彭长林所谓执行救济竞合,是指执行当事人、利害关系人或案外人,就具体执行案件的同一执行行为或执行标的,各自以不同的途径、方式及理由等提出异议,交由人民法院审查裁决的情形。慧眼辨析和准确把握执行救济竞合,对于及时、准确审查处理执行争议,提高执行效率,保护执行当事人、利害关系人、案外人合法权益具有积极意义。笔者现侧重从实务的角度,针对执行救济不同路径的竞合情形,就如何在实务中把握谈些心得。 执行实践中执行救济竞合情形,常见的有各不同主体的执行异议救济竞合、利害关系人程序异议与案外人实体异议竞合、消极执行与执行异议及执行监督救济竞合、执行异议与案外人异议及执行监督救济竞合四种情形。对执行救济竞合情形的不同处理,将在后续救济途径、救济时效、救济功能上产生不同的法律后果。因此,在司法实务中应当明晰梳辨、认真把握,针对不同情形作出不同处理。具体可从四个方面审查把关: 一、把好立案受理关 原则上对所有执行当事人、利害关系人、案外人的异议、执行复议、案外人异议之诉等,均应予以受理。但对同一主体就同一执行事项所提出的异议,则只能选择其中最恰当情形予以立案;如果当事人、利害关系人、案外人已行使异议权、复议权、申请更换执行法院权、诉权以资救济,则无必要启动执行监督立案程序。反之,则应当启动执行监督立案程序予以执行监督。 对于立案受理这一环节,还应注意:一是审查基本要件,防止恶意异议。基本要件包括异议主体身份资料,如公民个人的居民身份证或户口簿、法人的机构代码证等;异议书使用书面形式提出,并由异议人签名盖章;相应的基本证据材料,如执行法院的具体执行行为法律文

书、执行行为所违反的法律条文、对执行标的权属凭证或相应权利证明等。三个基本情况不能同时提供的,一般不予立案受理。二是审查提起异议、复议或诉讼期间。对执行异议要求在执行程序结束前提出;对执行程序已经结束的,不能再作执行异议立案。对所遭受的损害,异议人可通过提起损害赔偿之诉或返还不当得利之诉或者要求执行法院予以国家赔偿;对申请变更执行法院,只能向上一级法院提出,但需适度控制,一般限于被执行人有财产可供执行或有条件执行的案件,且需执行期间满六个月以上(这里的六个月应当剔除公告期间、鉴定评估、异议审查等期间;对裁定不服向上一级法院申请复议期间为十日内,执行当事人、案外人向执行法院提起的许可执行之诉、执行标的异议之诉、分配方案异议之诉,为收到裁定或通知之日起十五日内。 二、把好审查定性关 首先,对执行异议及复议,主要审查执行行为是否违反了法律规定和司法解释,即审查执行行为的合法性。执行行为的范围主要包括四个方面:执行法院采取的执行措施、强制执行时应当遵守的程序、强制执行中作出的某些法律文书(包括应发出而未发出相应的法律文书,应发出但发出了错误的法律文书,不应发出而发出了某种法律文书等等,如进行民事搜查时未出示搜查令等、其他侵害当事人、利害关系人合法权益的执行行为(如违法追加、变更被执行人等。上述情形往往相互交织在一起,难以截然分开。 还应当明确,对于新民事诉讼法所规定的对被执行人限制出境、在征信系统记录、在媒体公布不履行义务信息,应当作为一种执行行为对待,对其异议应按执行异议、复议程序审查。 其次,对案外人异议,主要审查案外人对执行标的物有无“所有权或者是其他阻止标的物转让、交付的权利”,即是否有足以排除强制执行的权利。这种权利不一定都是物权,主要包括所有权、用益物权、担保物权、占有、孳息收取权、债权、依法保全的标的物等。

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、

关于SSH框架发展

关于SSH框架发展 SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H在正确使用时可弥补网络中的漏洞。S S H客户端适用于多种平台。几乎所有U N I X平台—包括H P - U X、L i n u x、A I X、S o l a r i s、Digital UNIX、I r i x,以及其他平台—都可运行SSH。 传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。 Java2企业版为中间件领域思想的统一上发挥了很大的作用。比如,J2EE为分布式事务管理、目录服务和消息服务提供了一套标准的编程接口。J2EE的基础——Java2标准版(J2SE) ,成功地为Java提供了一套访问关系数据库的标准。 但是,就像本文中“J2EE缺乏对编程的支持”提到的一样,J2EE这个平台没有能够提供一个令人满意的应用程序编程模型(application programming model)。Sun 公司和一些大的应用服务器供应商都想用开发工具来降低J2EE开发的复杂性,但是这些工具没有其他的JAVA 开发工具优秀,后者有先进的重构工具,和.NET平台相比,J2EE 的工具支持显得很逊色。 很多J2EE开发工具自动产生的代码像这些工具本身同样复杂。在开源社区很多小型J2EE开发者选择了另外一种开发方式——一些可以降低J2EE开发难度的开发框架,较为流行的比如: Struts, Hibernate, 和 Spring Framework,他们当今很多J2EE项目种扮演着重要角色。

hibernate关联注解

说明: 本文对hibernate的一对多、多对一、多对多的关联 示例代码是Order类和OrderItem类的一对多的关系 1.一对多 1.1注解方式: @OneToMany 代码示例如下: 双向关联,维护端在“多”的一端 Public class Order implements Serializable { Private Set orderItems = new HashSet(); @OneToMany(mappedBy="order"(有了mappedby不能也不该在此再定义@joincolumn),cascade = CascadeType.ALL, fetch = https://www.sodocs.net/doc/da16009492.html,ZY) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 单向关联,维护端在此端 Public class Order implements Serializable { private Set orderItems = new HashSet(); @OneToMany(cascade = CascadeType.ALL, fetch = https://www.sodocs.net/doc/da16009492.html,ZY) @JoinColumn(name=”order_id”) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 1.2维护端和级联问题 维护端的意思是对外键进行维护,维护端有对外键进行插入和更新的权利。 下面分情况介绍hibernate的级联操作: 1.2.1单向关联 对“一”表进行插入一条记录的操作: 1)级联类型:CascadeType.ALL 执行语句: 1.insert into category (description, name, id) values(?, ?, ?)

相关主题