attachdirty-attachdirty优质

编辑:周舟 | 时间:2021-08-18 21:00:10
来源:互联网
正文
编辑推荐

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层有什么关系?说得具体一些。

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

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层的区别是什么?

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

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=2 System.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的老师帮我给这段代码注释下

用户增加,列出,密码检查的DAO类。
你要怎么详细?


查看全部
收到5067个赞