1、实体bean的配置
(1)用配置文件和bean来配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>
classpath:com/.../bean
</value>
</list>
</property>
</bean>
(2)无专门bean配置文件的配置(需要: Hibernate库文件,Hibernate Annotations库,ejb3-persstence.jar(Java 持久化API))
<!--Hibernate SessionFatory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="annotatedClasses">
<list>
<!--添加bean -->
<value>....bean.AddressBook</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.generate_statistics">false</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>
2、Hibernate Annotations详解
参阅:
http://weishuwei.iteye.com/blog/95581
需要引用的包
import javax.persistence.*;
import org.hibernate.annotations.*;
映射实体类
@Entity
@Table(name = "HRMS_EMPINFO_COMPANY")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "HRMS_EMPLOYEEINFO_SEQUENCE", allocationSize = 1)
public class Company implements java.io.Serializable
映射标识符
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
public Long getId() {
return id;
}
映射属性
@Column(name = "REMARKS", length = 200)
public String getRemarks() {
return remarks;
}
@Column(name = "POSITION", length = 20,updatable=false)
public String getPosition() {
return position;
}
关联关系之一对一
@OneToOne(mappedBy = "address")
public User getUser() {
return user;
}
//a、两边都定义了@OneToOne,但都没有定义mappedBy,则user和address表都会生成到对方的外键,双方都是这个关系的拥有者。
//b、两边都定义了@OneToOne,如果user定义了mappedBy,则在address表生成到user的外键,address是这个关系的拥有者;如果address定义
//了mappedBy,则在user表生成到address的外键,user是这个关系的拥有者。
关联关系之一对多
@OneToMany(targetEntity = Employee.class, cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "company")
@JoinColumn(name = "COMPANY_ID")
public List<Employee> getEmployees() {
return employees;
}
//company为Employee.class实体中的Company.class类型的属性名。表明Company.class是关系的拥有者。
//其中定义mappedBy的是@OneToMany,也就是说One这一方是关系的拥有者。Many一方的表中生成到关联类的外键。
关联关系之多对一
@ManyToOne(targetEntity = Company.class, fetch = FetchType.LAZY)
@JoinColumn(name = "COMPANY_ID")
public Company getCompany() {
return company;
}
@ManyToOne(targetEntity = Job.class, fetch = FetchType.LAZY)
@JoinColumn(name = "JOB",updatable=false)
public Job getJob() {
return job;
}
3、遇到问题
(1)、删除某个实体时,会出现更新语句。如
Hibernate: update HRMS_EMPINFO_EMPLOYEE set TEAM_ID=null where TEAM_ID=?
Hibernate: delete from HRMS_EMPINFO_EMPLOYEE where id=?
Hibernate: delete from HRMS_EMPINFO_TEAM where id=?
分析:hibernate配置文件问题
解决:hibernate配置文件中给一对多关系增加主操作配置参数,这样只会更新一次(更新操作),只有删除(删除操作)。
Company实体bean的配置
@OneToMany(targetEntity = Employee.class, cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, mappedBy = "company")
@JoinColumn(name = "COMPANY_ID")
Employee实体bean的配置
@ManyToOne(targetEntity = Company.class, fetch = FetchType.LAZY)
@JoinColumn(name = "COMPANY_ID")
public Company getCompany() {
return company;
}
(2)、org.hibernate.NonUniqueObjectException异常
[org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/employeeManage].[default]] - <Servlet.service() for servlet default threw exception>
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [....bean.Interview#230]
解决办法:使用meger方法代替update方法
(3)、在hibernate中使用SQL语句示例
String sqlStart = "select app.* ";
String sql = "from HRMS_RECRUITMENT_APPLIER app,"
+ "HRMS_RECRUITMENT_JOB job where app.APPLY_JOB=job.id "
+ "and job.status=? and app.ID in (select USER_ID from "
+ "(select a.* from HRMS_RECRUITMENT_INTERVIEW a ,"
+ "(select USER_ID,max(INTERVIEWDATE) mt from "
+ "HRMS_RECRUITMENT_INTERVIEW group by USER_ID) b "
+ "where a.USER_ID=b.USER_ID and a.INTERVIEWDATE=b.mt) temp "
+ "where interviewstatus=?) ";
String sqlEnd = " order by app.id";
Query query = this.openSession()
.createSQLQuery(sqlStart + sql + sqlEnd).addEntity("app",
Applier.class);
query.setInteger(0, jobStatus);
query.setLong(1, interviewStatus);
int startIndex = Page.getStartOfPage(pageNo, pageSize);
List<Applier> list = query.setFirstResult(startIndex).setMaxResults(
pageSize).list();
(4)、模糊查询
criteria.add(Restrictions.like(propNames[i], propValues[i], MatchMode.ANYWHERE));
Hibernate相关知识参阅:
http://aumy2008.blogbus.com/
分享到:
相关推荐
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
"educationSelectItemInfos" executeResult="false" /> ...在实际项目中,还需要结合Hibernate进行持久层操作,以及Spring进行依赖注入和事务管理,共同构建出完整的SSH(Struts2 + Hibernate + Spring)企业级应用。
网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring...
这个基于Struts 2+Hibernate+Spring实现的论坛系统,充分利用了这些框架的优势,为用户提供了交互性强、数据管理高效的在线讨论平台。 首先,Struts 2 是一个 MVC(Model-View-Controller)框架,它负责处理用户的...
公文管理、申请审批、公告管理、会议管理、权限管理、个人办公、客户管理、人事等等。项目技术:Struts1.2 + Hibernate3.0 + Spring2 +DWR。java毕业设计 jsp毕业设计 ssh毕业设计
毕业设计 基于SSH2新闻发布管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成
Java Web整合开发实战--基于Struts 2+Hibernate+Spring.pdf 1章 Web的工作机制 2章 搭建Java Web开发环境 3章 JSP及其相关技术 2篇 表现层框架Struts技术 4章 Struts快速上手 5章 解密Struts之核心文件 6章 ...
总结来说,这个"基于Struts2+hibernate+spring 注解开发的学生信息管理系统"是一个利用Java Web三大框架的典型应用,实现了学生信息的基本操作。通过优化前端设计,可以进一步提升系统的整体质量和用户体验。在实际...
总的来说,基于Struts2+Spring+Hibernate+MySql的注册登录系统是利用这些技术协同工作,实现了用户注册、登录的基本功能。Struts2处理请求,Spring管理组件和事务,Hibernate负责数据持久化,而MySql存储数据。...
适合初学ssh 三大框架...这是刚学三大框架的时候做的一个小练习。是用myeclipse做的,导入一下,然后把数据库文件也导入一下,在apllicationcontex。xml文件中把数据库密码修改一下,我的是空,根据你的数据库修改一下
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...
一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去
《JavaEE实用开发指南:基于Weblogic+EJB3+Struts2+Hibernate+Spring》-- part2/3
【标题】"在线音乐网站(Struts2+hibernate+spring)" 是一个基于Java技术栈构建的Web应用程序,旨在提供音乐流媒体服务。这个项目整合了三个关键的开源框架:Struts2、Hibernate和Spring,它们在Java Web开发中扮演...
【标题】:“全套源码-论坛系统(Struts 2+Hibernate+Spring实现)”揭示了一个基于Java技术栈开发的论坛系统,它整合了三个重要的框架:Struts 2、Hibernate和Spring。这个项目旨在提供一个完整的解决方案,帮助...
Struts2+Hibernate+Spring整合开发技术详解19章网上书店完整源码(内附数据库导出文件) 与书上最后一章内容完全对应 可以结合书上教程进行最后一章学习
毕业设计 基于SSH2高校协会管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成高校协会管理系统
毕业设计 基于SSH2商品进销存管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成
Struts 2+Hibernate+Spring整合开发技术详解sample.pdf