attachdirty

hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了hibernate对象的三种状态 。
瞬时态(没有id , 不与session关联)
持久态(有id , 与session关联)
托管态(有id , 不与session关联)

User user = new User();//新建的对象是瞬时态

session.save(user);//save后 , user变成持久态

user.setAge(20);//对持久态的改变 , 会在session提交时自动更新数据库

session.close();//session关闭后 , user变成托管态

user.setAge(19);//这时改变其属性 , 将不会自动更新数据库

session.update(user);//更新托管态对象到数据库 , 并且将其重新变为持久态 。

最后:
session.get()
session.load()
session.createCriteria().list()
查询出来的都是持久态 。

关于hibernate的merge、attachDirty、attachClean方法的应用老大你给出的例子中讲得很清楚的

hibernate saveOrUpdate方法和merge的区别首先 saveOrUpdate返回void 也就是什么都不返回 而merge会返回一个对象

其次 saveOrUpdate的做法是:自动判断该对象是否曾经持久化过 , 如果曾持久化过则使用update操作 否则save操作

merge 在执行session.merge(a)代码后,a对象仍然不是持久化状态 , a对象仍然不会被关联到Session上 而update会持久化对象

说白了:merge()用法替代了hibernate早期版本的saveOrUpdateCopy , 因此该方法的作用只是将当前对象信息保存到数据库,并且不会将对象转换成持久化状态 。

关于hibernate的saveOrUpdate方法的一个问题hibernate的一级缓存中 , flush是清除缓存 , 将hibernate快照当中的数据一次性的提交的 , hibernate在查询数据的时候 , 他只会从数据查询一次 , 然后将数据放到内存当中 , 当你在set属性时 , hibernate会和内存中的做对比 , 如果只不一样的话 , 就修改其值 ,  ession.flush清除缓存 , 清除缓存时就会提交事务~

为什么我用hibernate的attachDirty方法更新一条数据时 , 是插入一条新的数据 , 而不是在原来数据上修改?说明你的那条数据在session里是Transient的

hibernate.merge()方法怎么用调用就行呗
merge方法 , 传入的参数在数据库中不存在的时候会添加一条数据 , 根据主键判断已存在的时候会更新这条数据

hiabernate中merge() , attachDirty() , attachClean()都是什么意思 , 哪个才是修改用的 , 哪个更好用拼写:hibernate 。
详见百度知道:http://zhidao.baidu.com/question/78081681.html 答案 。

Hibernate里面的merge方法是用来做什么的游离状态或是自由状态(没有写到数据库中)的实例可以通过调用 merge()方

法成为一个新的持久化实例(写入到数据库中)!


祝楼主早日成功!

怎样使用Hibernate中的merge方法 merge方法和update方法的区别使用merge方法 , 如果数据库中有该记录 , 则更新该记录 , 如果不存在该记录 , 则进行insert操作 。
使用update的话 , 会无条件执行update , 
也就是说如果数据库中有该记录的话 , merge和update是一样的 , 但是如果数据库中没有该记录 , 使用merge执行insert , 不会报错 , 而使用update会报错 。

用hibernate自动生成的attachDirty方法执行update为什么最后执行的是save?1、load()是延时加载 , 不会立即生成sql语句 , 不会立即访问数据库 , 当第一次使用时才会生成sql语句 , 返回的是一个cglib代理 。load()查询出来的时候永远不可能是空 。
2、当不知道对象的状态是临时状态还是游离状态时 , 就会用到saveOrUpdate(),根据ID和version的值判断是save还是update 。
如果有ID和version值 , 则调用update 。
如果不存在该记录 , 则进行insert操作 。
saveOrUpdate()后对象会变成持久的 。

SSH框架中 使用hibernate反向工程生成表时 , 表与表之间的外建关系是建表只要代码没什么错误就会进行关联 , 但是这种方法麻烦点 , 一般是先建表 , 然后添加hibernate支持文件 , 在数据库中反向生成实体类到po包中 , 这样不会出现错误

SSH框架中 用到的 getHibernateTemplate().save(); 方法的一点疑问你配置id的时候配置了主键自动生成?比如:
这样会使用序列Sequence的 , 然后你在创建student的时候有给他的ID传了值
这样插入到数据库导致报错
如果你要自己对Student对象的id进行赋值的话 , 记得好像id应该配置成:


希望对你有帮助

JAVA SSH框架 hibernate 关于事务问题<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

classpath:hibernate.cfg.xml



<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">








首先在spring里面添加事务的配置 , 然后给service方法添加事务注解就可以了
@Transactional(rollbackFor=Exception.class) , 记住要是service里面加事务注解 , 事务配置的方法不同 , 我给的这个适合系统全部使用注解的情况 , 添加事务注解后 , 只要代码里面有异常 , spring会自动回滚 , 不然你整ssh干什么呢
spring里面要加下面的命名空间 , 可以在网上看别人怎么配的

xmlns:tx="http://www.springframework.org/schema/tx"

请问hibernate中merge()、attachDirty()、attachClean()这三个方法是做什么的?怎么用?**
* 将传入的detached状态的对象的属性复制到持久化对象中 , 并返回该持久化对象
* 如果该session中没有关联的持久化对象 , 加载一个 , 如果传入对象未保存 , 保存一个副本并作为持久对象返回 , 传入对象依然保持detached状态 。
* @see com.CodeDepts
*/
public CodeDepts merge(CodeDepts detachedInstance) {
log.debug("merging CodeDepts instance");
try {
CodeDepts result = (CodeDepts) getSession()
.merge(detachedInstance);
log.debug("merge successful");
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}

/**
* 将传入的对象持久化并保存 。
* 如果对象未保存(Transient状态) , 调用save方法保存 。如果对象已保存(Detached状态) , 调用update方法将对象与Session重新关联 。

* @see com.CodeDepts
*/

public void attachDirty(CodeDepts instance) {
log.debug("attaching dirty CodeDepts instance");
try {
getSession().saveOrUpdate(instance);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}



/**
* 将传入的对象状态设置为Transient状态
* @see com.CodeDepts
*/

public void attachClean(CodeDepts instance) {
log.debug("attaching clean CodeDepts instance");
try {
getSession().lock(instance, LockMode.NONE);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}

用spring连接池向数据库中写入大量数据时会报错 , 是不是需要在每次写入一条数据后关闭连接?你调试的时候把程序具体执行的sql语句打印出来看看呗 , 然后再在mysql里面执行这条语句看看结果是不是一样 。
我感觉未必和字符编码有关 。

dao.attachDirty 和dao.save 有什么区别啊?Dao提供的merge,attachDirty和 attachClean的使用 void attachDirty(TTable1 instance)方法 将传入的对象持久化并保存. 如果对象未保存(Transient状态),调用save方法

初学hibernate遇到了一个很费解的问题 , hibernate使用merge()保存对象一般情况下 , 不推荐用这个方法啊……

name属性在表里是不是主键?

hibernate中更新 , 数据库未同步更新楼主:
你的对象映射文件中的date属性设置了type属性吗(type="date")?没有的话加上试试 。

使用hibernate.get()取得对象再set()属性后调用update()更新对象时一直不能写入到数据库 , 是什么原因?没有打开事务 , 如果打开了还不行 就try catch一些 跟更新部分代码 看报什么错误了 。

Hibernate中怎样让 get() 不自动更新到数据库啊get了之后 , 用session.evict(st1)把st1清出session , 就不会更新了

Dao层到底是做什么的?service和Dao层有什么关系?说得具体一些 。

attachdirty

文章插图

Dao层:主要是做数据持久层的工作 , 负责与数据库进行联络的一些任务都封装在此 , DAO层的设计首先是设计DAO的接口 , 然后就可在模块中调用此接口来进行数据业务的处理 , 而不用关心此接口的具体实现类是哪个类 , 显得结构非常清晰 , DAO层的数据源配置 。dao层代码示例:service层:主要负责业务模块的逻辑应用设计,Service层的业务实现 , 具体要调用到已定义的DAO层的接口 , 封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性 , 程序显得非常简洁 。service层代码示例:dao层和service层关系:service层经常要调用dao层的方法对数据进行增删改查的操作 , 现实开发中 , 对业务的操作会涉及到数据的操作 , 而对数据操作常常要用到数据库 , 所以service层会经常调用dao层的方法 。扩展资料Service层是建立在DAO层之上的 , 建立了DAO层后才可以建立Service层 , 而Service层又是在Controller层之下的 , 因而Service层应该既调用DAO层的接口 , 它刚好处于一个中间层的位置 。每个模型都有一个Service接口 , 每个接口分别封装各自的业务处理方法 。在实际开发中DAO层大多是对某张表进行增删改查 , 都是一些固定的语句 , 除非涉及到更复杂的service层业务逻辑 , 才可能要添加更复杂的DAO层方法 。参考资料:百度百科-DAO
DAO和Repository有什么区别现在也有不少新的开源永Repository替代DAO了 , Repository封装了DAO , 还有一些装配工作 , 把数据装配成一个完整的对象 。如果直接使用Hibernate就无需划分了

dvd刻录拖机模式设定TAO DAO有什么区别简单点说 , 用TAO的话 , 刻完之后 , 如果还有空间 , 下次还可以接着刻东西进去 。
用DAO的话 , 刻完之后 , 就不能在刻东西进去了 。
各有得失 , 用TAO虽然以后还可以追加东西进去 , 但要是下次刻录环境不稳定 , 在追加东西的时侯失败了 , 整个光盘也就飞了 。。
用DAO的话 , 虽然以后不能在刻了 , 但稳定 , 不会有TAO所说的危险 。。

java中dao层和service层的区别是什么?
attachdirty

文章插图

dao层:dao层叫数据访问层 , 全称为data access object , 属于一种比较底层 , 比较基础的操作 , 具体到对于某个表、某个实体的增删改查service层:service层叫服务层 , 被称为服务 , 肯定是相比之下比较高层次的一层结构 , 相当于将几种操作封装起来 。至于为什么service层要使用接口来定义有以下几点好处: 在java中接口是多继承的 , 而类是单继承的 , 如果你需要一个类实现多个service , 你用接口可以实现 , 用类定义service就没那么灵活要提供不同的数据库的服务时 , 我们只需要面对接口用不同的类实现即可 , 而不用重复地定义类编程规范问题 , 接口化的编程为的就是将实现封装起来 , 然调用者只关心接口不关心实现 , 也就是“高内聚 , 低耦合”的思想 。扩展资料:Java Web , 是用Java技术来解决相关web互联网领域的技术总和 。web包括:web服务器和web客户端两部分 。Java在客户端的应用有java applet , 不过使用得很少 , Java在服务器端的应用非常的丰富 , 比如Servlet , JSP和第三方框架等等 。Java技术对Web领域的发展注入了强大的动力 。参考资料:Web Service百度百科 数据访问层百度百科
求java大神帮我详细注释下下面这段代码 , 是model层工资模块里复制出来的该函数作用是,保留两位小数,我觉得肯定是你们搞得好耍的.public String getJbx() {String str=""+jb;//jb 工资比如4321.2元System.out.println("-----------"+str);int i = str.lastIndexOf(".");//找出小数点在字符串中的下标System.out.println("!!!!!!!!!!!!!!!!"+i);String newstr = str.substring(i+1);//剪切出小数点之后的数字 newstr=2System.out.println("@@@@@@@@@@@@@@@@@@@"+newstr);if(newstr.length()==1){//判断小数点后有几位小数,如果只有一位小数,则补零str+="0";}return str;//最后这里返回 4321.20 }

java里面实体类和dao类 有一段实例 , 希望各位高手给注释一下 要详细的注释 , 字数有限 就不想实体类了package s2jsp.bysj.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import s2jsp.bysj.entity.Users;

public class UserDao extends BaseDao {
private Connection conn; // 数据链接类

private PreparedStatement pstmt; // 与数据库交互的声明

private ResultSet rs; // 数据结果类

/**
* 根据用户名和密码 , 查找相关用户信息
*
* @return 用户对象
*/
public Users findUsers(String userName, String password) {
Users user = null; // 声明一个空的实体
// sql 语句: 查询 所有 从 用户表 条件 用户名 = ? 和 密码 = ?
String sql = "select * from users where userName=? and password=? ";
try {
conn = this.getConn(); // 通过 BaseDAO 获取 链接
pstmt = conn.prepareStatement(sql); // 实例声明
pstmt.setString(1, userName); // 给第一个问号赋值
pstmt.setString(2, password); // 给第二个问号赋值
// PreparedStatement 很好的解决了 SQL 注入的问题
rs = pstmt.executeQuery(); // 查询 返回结果
if (rs.next()) { // 如果有数据结果 就证明已找到匹配的用户
user = new Users(); // 实例 user
user.setUserID(rs.getInt("userID"));
user.setUserName(userName);
user.setPassword(password);
user.setStatus(rs.getInt("status"));
// *********************** 以上给实体设值 *********************** //
}
} catch (Exception e) {
e.printStackTrace(); // 异常处理
} finally { // 最终 一定的执行的 closeAll 方法
this.closeAll(conn, pstmt, rs);
}
return user; // 返回用户实体
}

/**
* 判断数据库中当前用户名是否存在
*
* @param userName
*用户名
* @return 存在返回true,否则返回false
*/
public boolean findUsers(String userName) {
// sql 语句: 查询 所有 从 用户表 条件 用户名 = ?
String sql = "select * from users where userName=? ";
try {
conn = this.getConn();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, userName);

rs = pstmt.executeQuery();
// 以上参考第一个方法注释
if (rs.next()) { // 如果有匹配记录
return true; // 返回 true
}
} catch (Exception e) {
e.printStackTrace();
} finally {
this.closeAll(conn, pstmt, rs);
}
// ****************** 以上太多相同之处参考第一个方法注释 ****************** //
return false;
}

/**
* 添加用户信息
*
* @param userName
* @param password
* @return 操作数据库影响行数
*/
public int insertUser(String userName, String password, int status) {
// sql 语句: 插入 进 用户表 值( ? , ? , ? )
String sql = "insert into users values(?,?,?) ";
// 字串数组形式的参数
String[] params = new String[] { userName, password, status + "" };
// 自定义方法 , 执行 sql , 在方法内遍历参数赋值
return this.executeSQL(sql, params);
}

/**
* 查找所有的注册用户信息
*
* @return 用户列表
*/
public List selectAllUser() {
// 实例一个列表
List list = new ArrayList();
// SQL 语句:查询 所有 从 用户表
String sql = "select * from users ";
try {
conn = this.getConn();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
// ****** 以上重复参考第一个方法 ******* //
while (rs.next()) { // 循环 数据结果, 将数据赋给新实例的 用户实体, 加进列表
Users user = new Users();
user.setUserID(rs.getInt("userID"));
user.setUserName(rs.getString("userName"));
user.setPassword(rs.getString("password"));
user.setStatus(rs.getInt("status"));

list.add(user);

}
} catch (Exception e) {
e.printStackTrace();
} finally {
this.closeAll(conn, pstmt, rs);
}
// ****************** 以上太多相同之处参考第一个方法注释 ****************** //
return list;
}

/**
* 根据用户ID,进行删除操作
*
* @param userID
* @return 执行SQL语句所影响的数据库行数
*/
public int deleteUserByID(String userID) {
// SQL 语句:删除 从 用户表 条件 用户ID = ?
String sql = "delete from users where userID = ? ";
String[] param = new String[] { userID };
return this.executeSQL(sql, param);
// *************** 以上两句参考插入方法 *************** //
}
}

最后:
希望帮到你 , 有什么问题Hi我 。

新手看java项目中的dao层代码 , 求大神帮忙注释一下这一段!请贴代码 , 贴代码呢

求java高手给这段代码注释这个只是实现了一个计算器的基本界面的程序 , 对相应的事件并没有做什么处理 。

麻烦懂JAVA的老师帮我给这段代码注释下【attachdirty】用户增加,列出,密码检查的DAO类 。
你要怎么详细?