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 有什么區別?。緿ao提供的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類 。
你要怎么詳細?