1. 程式人生 > >記一次hibernate快取引發的問題

記一次hibernate快取引發的問題

這個不太瞭解 歡迎指點

hibernate有幾種狀態 瞬時態 持久態 遊離態

不能確保物件時遊離態的狀態下對物件進行賦值操作可能會被存到資料庫

最簡單的方法的new一個去儲存這個物件

比如下邊這個 註釋掉那幾行 放開後 資料庫中的值就會相應變化

@Override
	public List<AlertAccount> findByUserIdAndType(String id, SendWay weChat) {
		List<AlertAccount> accountList = alertAccountRepository.findByUserIdAndType(id, weChat);
//		for(AlertAccount account:accountList){
////			account.setName(userService.findById(account.getUserId()).getUserName());
//			account.setName(account.getAccount());
//		}
		return accountList;
	}

當時解決辦法是New了一個

accountList = alertAccountService.findByUserIdAndType(userId, type);
			List<AlertAccount> list = new ArrayList<>(accountList);
			for(AlertAccount account:list){
				account.setName(account.getAccount());
			}
    return list;

還有一種辦法 沒親自嘗試

dao層繼承EntityManager 呼叫detach方法 把物件變為遊離態