`
chansonyan
  • 浏览: 2421 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate的update实体类

阅读更多
当用webwork或struts2时,提交过来的表单只对该实体类的部分属性进行了赋值(当然是通过get和set方法),所以有一部分属性是null的。可以通过Java反射获取不为空的值进行不为空的更新。

//将不为空的值放入Map中
public static Map describe(Object object) {
         Map map = new HashMap();
Class c = object.getClass();
Field[] fields = c.getDeclaredFields();
try {
for(Field f : fields) {
f.setAccessible(true);
Object o = f.get(object);
if(o != null) {
map.put(f.getName(), o);
}
}
} catch(Exception e) {
e.printStackTrace();
}
return map;
}

//根据实体对象生成更新语句
public static String createHql(String className, String condition, Map map) {
List<String> list = new ArrayList<String>();
map.remove("class");
StringBuffer sb = new StringBuffer();
sb.append("update ");
sb.append(className);
sb.append(" set");
for (Object key : map.keySet()) {
if (StringUtil.isNullOrSpace(map.get(key))) {
list.add(key.toString());
} else {
sb.append(" ,");
sb.append(key);
sb.append("=:");
sb.append(key);
}
}
for (String key : list) {
map.remove(key);
}
if (condition != null && !"".equals(condition)) {
sb.append(" ");
sb.append(condition);
}
return sb.toString().replaceFirst(",", "");
}

//设置参数

public static void populate(Query query, Map map) {
if (map == null) {
return;
}
for (Object key : map.keySet()) {

if (map.get(key) != null && !"".equals(map.get(key))) {

if(map.get(key) instanceof Timestamp) {
query.setTimestamp(key.toString(), (Timestamp)map.get(key));
} else if(map.get(key) instanceof Double) {
query.setDouble(key.toString(), (Double)map.get(key));
} else if(map.get(key) instanceof List){
query.setParameterList(key.toString(), (List)map.get(key));
} else {
query.setParameter(key.toString(), map.get(key));
}
}
}
}

//DAO层更新
//condition为where子句,agrMap为where字句的参数

public void update(Object object ,String condition, Map agrMap) {
Map map = null;
map = BeanUtils.describe(object);
String hql = null;
//生成sql
hql = CommonQuery.createHql(object.getClass().getSimpleName(), condition, map);
//注入查询条件参数
map.putAll(agrMap);
Query query = getSession().createQuery(hql);
CommonQuery.populate(query, map);
query.executeUpdate();
}
分享到:
评论

相关推荐

    Hibernate_实体类_注解_大全

    在Java持久化框架Hibernate中,实体类注解是一种强大的工具,用于定义对象模型与数据库之间的映射关系。这些注解使得开发人员无需编写XML配置文件,即可实现ORM(对象关系映射)。下面将详细讲解在给定的文件中提到...

    自动生成hibernate映射文件和实体类

    然后,在 MyEclipse Datebase Explorer 中选中所有表,点击右键,选择 Hibernate Reverse Enginnering,选中目录存放将要反转出来的实体类查看是否选中 Update Hibernate configuration。如果没有自己勾选一下,下...

    Hibernate update问题

    Hibernate允许配置实体类为延迟更新或即时更新。默认情况下,所有实体都是即时更新,这意味着只要对象状态改变,Hibernate就会生成UPDATE语句。若想减少不必要的数据库交互,可设置为延迟更新,只有在Session提交时...

    Hibernate实体映射

    在Java类上使用特定的Hibernate注解可以声明实体类及其属性与数据库表的对应关系。例如,`@Entity`注解标识一个类为Hibernate实体,`@Table`指定对应的数据库表名,`@Id`标记主键字段,`@GeneratedValue`定义主键...

    hibernate实体映射文件字段设置默认值

    ### Hibernate实体映射文件字段设置默认值 在Hibernate框架中,实体映射文件(通常为`.hbm.xml`)用于定义Java对象与数据库表之间的映射关系。这其中包括了属性到数据库表列的映射、主键生成策略、以及一些高级特性...

    hibernate操纵实体对象

    在这个主题“hibernate操纵实体对象”中,我们将探讨如何使用Hibernate来创建、更新、删除和查询数据库中的实体对象。 首先,`HibernateSessionFactory`是Hibernate的核心组件之一,它负责创建`Session`对象。`...

    strtus2+Spring+hibernate整合通过实体类生成数据库表

    6. **生成数据库表**:使用Hibernate的工具,如`hbm2ddl.auto`配置,可以设置为`create`或`update`,在应用启动时自动根据实体类生成或更新数据库表。 7. **编写业务逻辑**:在Service层实现业务逻辑,通过...

    Hibernate实体层设计

    实体类需要通过注解@javax.persistence.Entity来标识,并且需要一个唯一的主键标识符,通常使用@Id注解。例如: ```java @Entity public class User { @Id private Long id; private String name; // getters ...

    hibernate反向生成实体类及CRUD操作教学视频

    【hibernate反向生成实体类及CRUD操作教学视频】是针对Java开发中的一个重要框架——Hibernate进行深入学习的资源。Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作,通过将Java...

    如何解决hibernate自动更新实体类的问题共5页.pd

    在使用Hibernate进行Java开发时,有时会遇到一个常见的问题,即Hibernate自动更新实体类的问题。这个问题通常发生在我们从数据库加载一个实体对象,对其进行修改,但并没有显式地调用`save()`或`update()`方法,然而...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    1. **实体类生成**:基于数据库表结构,自动创建对应的Java实体类,减少手动编写代码的工作量。 2. **HQL/SQL编辑器**:提供语法高亮和智能提示,支持HQL(Hibernate Query Language)和SQL的编写与调试。 3. **...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605

    通过创建一个新的Hibernate项目,实践从数据库逆向生成实体类,然后利用可视化设计工具调整映射关系,再生成对应的DAO和Service代码,最后进行HQL查询测试,全程体验Hibernate Tools带来的便利。 总结,Hibernate ...

    如何解决hibernate自动更新实体类的问题共5页.pdf.zip

    在Java的持久化框架Hibernate中,自动更新实体类的问题是一个常见的困扰开发者的问题。当实体类的状态发生改变,Hibernate默认会尝试将这些变化同步到数据库,这在某些情况下并不符合我们的需求。本文将深入探讨这个...

    IntelliJ IDEA下自动生成Hibernate映射文件以及实体类

    IntelliJ IDEA下自动生成Hibernate映射文件以及实体类 IntelliJ IDEA是一款功能强大的集成开发环境(IDE),它提供了许多实用的功能来提高开发效率。其中一个非常有价值的功能是自动生成Hibernate映射文件和实体类...

    hibernatetools-Update-4.1.1.zip

    Hibernate Tools的核心功能之一是逆向工程(Reverse Engineering),它可以将现有的数据库结构自动生成对应的Java实体类、Hibernate配置文件以及DAO层代码,极大地简化了项目初始化阶段的工作。在4.1.1版本中,这一...

    vc生成hibernate的dao类

    1. **配置Hibernate**: 配置Hibernate的主配置文件(hibernate.cfg.xml),包括数据库连接信息、实体类映射文件等。 2. **实体类定义**: 定义Java Bean类,这些类代表数据库中的表,通过注解或XML文件进行ORM映射。 ...

    hibernate5类包

    1. **实体管理**:Hibernate的核心是实体管理,它将Java对象与数据库表进行映射。开发者通过注解或XML配置来定义这些映射。例如,`@Entity` 注解用于标记一个类为数据库中的表,`@Table` 定义对应的表名,`@Id` 表示...

    hibernate使用参考文档

    在 Hibernate 中,每个实体类都对应一个配置文件,该配置文件以 `.hbm.xml` 结尾。例如,`UserInfo` 实体类对应的配置文件为 `userinfo.hbm.xml`。在该文件中,我们可以定义实体类与数据库表之间的映射关系。 ...

Global site tag (gtag.js) - Google Analytics