- 浏览: 442412 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (355)
- Java (180)
- Jquery (18)
- Js (27)
- Mysql (3)
- Windows (6)
- C++ (1)
- Css (9)
- English (35)
- Sqlserver (1)
- Database (3)
- Git (1)
- Linux (5)
- Solr (1)
- Fun (5)
- C (2)
- Test (1)
- Math (2)
- Nlp (8)
- Algorithm (7)
- Regex (9)
- Other (5)
- Html (8)
- ASP (4)
- Access (2)
- Servlet (1)
- Lucene (3)
- Uml (2)
- Struts (19)
- Hibernate (5)
- Jstl (1)
- El (1)
- Python (1)
- SSH (2)
- Spring (1)
- Tomcat (4)
- Jsp (2)
- SE (1)
- Android (2)
- Excel (1)
- Ehcache (1)
- Flash (1)
- Pattern (1)
- Hadoop (1)
最新评论
-
huguyue1988:
怎么样可以判断访问的音乐加载完成了呢?我的界面要加载多个这个的 ...
jPlayer的一些用法 -
永不悔你:
[color=yellow][/c[*][img][/img] ...
MyEclipse 9.0运行速度优化 -
tianyalinfeng:
这个教程里都有吧
jquery 筛选器 -
mengfei86:
你太牛了,我找了半天的问题,你一句代码搞定了,谢了,id^, ...
jquery 筛选器
package com.patsnap.hibernate.beans;
import java.io.Serializable;
import java.util.List;
public class Patent implements Serializable{
private String pn;
private String apno;
private List<LegalStatus> legalStatus;
public List<LegalStatus> getLegalStatus() {
return legalStatus;
}
public void setLegalStatus(List<LegalStatus> legalStatus) {
this.legalStatus = legalStatus;
}
public String getPn() {
return pn;
}
public void setPn(String pn) {
this.pn = pn;
}
public String getApno() {
return apno;
}
public void setApno(String apno) {
this.apno = apno;
}
}
package com.patsnap.hibernate.beans;
import java.util.List;
public class LegalStatus {
private int id;
private String apno;
private List<Patent> patents;
public List<Patent> getPatents() {
return patents;
}
public void setPatents(List<Patent> patents) {
this.patents = patents;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getApno() {
return apno;
}
public void setApno(String apno) {
this.apno = apno;
}
}
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.patsnap.hibernate.beans">
<class name="Patent" table="Patent">
<composite-id>
<key-property name="pn" type="string" column="pn" />
<key-property name="apno" type="string" column="apno" />
</composite-id>
<bag name="legalStatus" table="Patent_LegatStatus"
inverse="false">
<key>
<column name="pn"></column>
<column name="apno"></column>
</key>
<many-to-many class="LegalStatus" column="id" />
</bag>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.patsnap.hibernate.beans">
<class name="LegalStatus" table="LegalStatus">
<id name="id" column="id" type="int">
<generator class="native" />
</id>
<property name="apno" column="apno" type="java.lang.String" />
<bag name="patents" table="Patent_LegatStatus"
inverse="false">
<key>
<column name="id"></column>
</key>
<many-to-many class="Patent">
<column name="pn"></column>
<column name="apno"></column>
</many-to-many>
</bag>
</class>
</hibernate-mapping>
注1:这里bag标签里没有设置cascade属性,这样在保存Patent或LegalStatus时仅级联保存中间表,不会删除中间表数据,但要求保存一方的时候,另一方的数据必须已经存在(因为仅级联保存中间表数据,不会保存另一方数据)
public static void insert() {
Session session = HibernateSessionFactory.getSession();
Transaction t = session.beginTransaction();
LegalStatus legalStatus = new LegalStatus();
legalStatus.setApno("12345");
Patent patent = new Patent();
patent.setPn("321141112");
patent.setApno("3211112");//该patent在数据库必须已经存在,否则报错
List<Patent> list = new ArrayList<Patent>();
list.add(patent);
legalStatus.setPatents(list);
session.save(legalStatus);
t.commit();
}
注2:如果bag标签里cascade属性设置了相应值(如save-update等),则在保存一方数据的同时会保存同时保存中间表和另一方的数据(如果不存在的话),但是再保存两者关系的同时,会先把中间表数据删除一遍,再加上当前添加的关系,所以这时候要特别注意,要先把关系设置完整再做保存操作,否则会删除已有的关系
public static void insert(){
Session session = HibernateSessionFactory.getSession();
Transaction t = session.beginTransaction();
LegalStatus legalStatus =new LegalStatus();
legalStatus.setApno("12345");
List<Patent> patentList = session.createQuery("from Patent where pn ='321141112' and apno='3211112'").list();
Patent patent = new Patent();
if (patentList.size()==1) {
patent = patentList.get(0);
patent.getLegalStatus().add(legalStatus);//保证原有的关系不变,不做这一步则丢失原有关系
}else {
patent.setPn("321141112");
patent.setApno("3211112");
List<Patent> list = new ArrayList<Patent>();
list.add(patent);
legalStatus.setPatents(list);
}
session.save(legalStatus);
t.commit();
}
注3:如果涉及到复合主键,该类需要implements Serializable
发表评论
-
新博开启
2013-10-17 11:29 602天涯临枫:http://www.tianyalinfeng ... -
使用FileUtils获取文件夹下所有指定文件
2013-09-23 11:42 1516org.apache.commons.io.FileUt ... -
hibernate去重复数据
2013-09-21 19:16 862DetachedCriteria dc = Detached ... -
ckeditor简单应用
2013-09-13 11:35 802准备 ckeditor前端源码ckeditor_4.2_f ... -
深度复制
2013-09-11 16:50 693浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而 ... -
Java的23中设计模式
2013-09-10 14:59 1104Java的23中设计模式 从这一块开始,我们详细介绍Jav ... -
设计模式的六大原则
2013-09-10 14:51 838设计模式的六大原则 1、开闭原则(Open Close ... -
heritrix-3.1.1简单使用
2013-09-06 16:43 9021.下载heritrix-3.1.1-dist.zip(此 ... -
web程序禁止访问指定文件
2013-09-04 13:26 727在web.xml中添加如下代码: <security ... -
iframe里取不到struts2 action里的值
2013-08-06 11:23 1131struts action里的属性值正常都是存放在reque ... -
struts2使用UrlRewriteFilter时报错
2013-07-29 11:18 627struts2使用UrlRewriteFilter时报错 ... -
java正则去掉所有html标签
2013-07-02 14:40 861public static String trimHtml( ... -
java类中获取classes文件夹路径
2013-07-02 14:20 987例如:Test.java 在Test中获取项目classe ... -
Ehcache配置
2013-07-01 15:41 816<defaultCache ... -
jsp中 <%! %> 和 <% %> 的区别
2013-05-22 15:35 577<%! int a = 0; %> 当js ... -
用递归实现查找最大值
2013-05-14 11:42 526private static int recursiveM ... -
常用正则表达式
2013-05-07 16:11 476/** * check mobile phone num ... -
中文转拼音
2013-05-02 15:35 431import net.sourceforge.pinyin4 ... -
java获取某一年某个节气日期
2013-04-27 15:43 1863private static String[] solar ... -
公历农历互相转换
2013-04-26 10:08 1022public class CalendarUtil { / ...
相关推荐
**第四部分:Hibernate复合主键** 复合主键在数据库设计中并不罕见,当一个表的主键由两个或更多字段组成时,就需要使用。在Hibernate中,可以使用@EmbeddedId和@IdClass注解来处理复合主键。@EmbeddedId将一个包含...
- **Session**: Hibernate的核心接口,用于与数据库交互,提供了保存、更新、删除和查询对象的方法。 - **SessionFactory**: 创建Session的工厂,通常在应用启动时创建并保持整个应用周期。 - **Transaction**: 事务...
9. **高级特性**:涵盖实体的生命周期回调方法、复合主键、联合主键、级联操作、双向关联的处理、集合映射(List、Set、Map等)等进阶内容。 10. **案例实战**:通过一个完整的项目案例,演示如何在实际开发中整合...
以下将详细解释四种主要的关联类型:复合主键、多对多、一对一和一对多。 1. **复合主键(JPACompositePK)** 在某些情况下,一个实体的主键可能由多个字段组成,这就需要使用复合主键。在JPA中,我们可以创建一个...
双向映射可以通过多对一、一对一、一对多关系来实现。 控件映射 Hibernate 的控件映射可以将一个对象的控件属性映射到数据库中。控件映射可以使用 Map 实现动态控件。 继承映射 Hibernate 的继承映射可以将一个...
理解一对一、一对多、多对一、多对多关联映射是Hibernate进阶的关键。关联可以通过外键、主键引用、复合主键等方式实现。级联操作允许在父对象的操作中同时影响子对象。 七、缓存机制 Hibernate的缓存分为一级缓存...
此外,Hibernate还支持JPA(Java Persistence API)、实体继承、复合主键、查询结果转换为自定义类型等功能,极大地丰富了Java开发中的数据操作。 总之,“Hibernate3.6中文文档”提供了关于Hibernate 3.6的全面...
例如,你可以通过 `<one-to-many>` 或 `<many-to-one>` 标签定义一对多或多对一的关系,通过 `<property>` 标签映射类的属性到数据库的列。 **延迟加载(Lazy Loading)** 延迟加载是一种优化策略,允许对象的部分...
10. **多对一、一对多、多对多关联映射** - 外键映射、集合映射,如List、Set、Map等。 - 使用@ManyToOne、@OneToOne、@OneToMany、@ManyToMany等注解实现。 11. **复合主键与自定义主键生成策略** - 组合主键的...
3. 联合主键:对于复合主键,Hibernate提供了复合主键的处理方式。 4. 多对多关联:通过中间表实现两个实体之间的多对多关联。 九、最佳实践 1. 合理设计实体关系,避免深度嵌套的关联查询。 2. 使用预编译的SQL...
10. **多对一、一对多、多对多关系映射**:Hibernate支持多种关联关系,如单向和双向的一对多、多对一,以及多对多关系的配置。 11. **继承映射**:Hibernate支持类的继承关系映射,包括单表、表-per-hierarchy和表...
当主键由多个字段组成时,可以使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键。 10. **索引注解(@Index)** `@Index`注解用于在数据库表的列上创建索引,提高查询效率。 11. **缓存注解(@Cacheable, @Cache...
如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。 四、字段映射(Columns) 字段与数据库列的映射通过`@Column`注解实现,如指定列名、长度、是否可为空等: ```java @Entity public class User { @Id ...
除了基础功能,Hibernate还支持多态性、继承映射、复合主键、延迟加载、双向一对多、多对多关系等复杂场景。此外,它也与其他技术如Spring Framework、MyBatis等有良好的整合性。 总的来说,《Hibernate中文参考...
当需要多个字段共同构成主键时,Hibernate的复合主键或联合主键功能就显得尤为重要,它允许我们将多个属性组合成一个主键。 9. **实体生命周期事件监听器** Hibernate允许注册监听器来响应实体的生命周期事件,如...
- 一对一关系通常要求一方为主键,另一方为外键,但也可以设计成两者都是主键,这被称为复合主键。 - 需要确保数据库表结构与实体类的映射一致,包括外键约束等。 通过以上步骤,我们可以成功地在Hibernate中建立...
15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索策略 16.1 Hibernate的检索策略简介 16.2 类级别的检索策略 16.2.1 立即检索 16.2.2 延迟检索 16.3 一对多...
9. **关联映射**:覆盖一对一、一对多、多对一、多对多的各种关联映射方式,以及级联操作和反向映射。 10. **缓存机制**:介绍Hibernate的两级缓存(一级缓存Session,二级缓存如EHCache或Infinispan),以及缓存...
3. **多对一(One-to-Many)、一对多(Many-to-One)、多对多(Many-to-Many)关系映射**: Hibernate 提供了丰富的注解和XML配置来处理各种关联关系。 4. **级联操作(Cascading)**: 通过级联属性,可以实现对关联...
7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子...