Hibernate取得シーケンス

2056 ワード

従業員ごとにIDがあり、従業員番号があります.IDはOracleのシーケンスで、自動的に1が加算されます.従業員番号は文字列で、合計8桁で、前は0で、後ろは従業員IDです.例えば、従業員IDが88で、その従業員番号は0000088です.
まず、従業員の番号はいつも8位で、前はすべて0で、この問題を解決するために、その番号のset方法に論理を追加する必要があります.もし番号の長さが8未満であれば、前に0を追加して、これは比較的に解決しやすいです.

public void setJobNumber(String jobNumber) {
		/*
		 *         ,          ,       
		 */
		if(StringUtil.isNotEmpty(jobNumber)&&jobNumber.length()<Constant.JOB_NUMBER_LENGTH){
			while(jobNumber.length()<Constant.JOB_NUMBER_LENGTH){
				jobNumber="0"+jobNumber;
			}
		}	
		this.jobNumber = jobNumber;
	}

次に、番号取得シーケンスの問題を解決し、まず私の解決策を示します.

Session session = getSession();
		// session.merge(arg0)
		Transaction tr = session.beginTransaction();
		try {
			session.save(user);
			//               
			user.setJobNumber(user.getUserID().toString());
			tr.commit();
			
		} catch (HibernateException e) {
			tr.rollback();
			log.debug("regist failed,the reason is :" + e.getMessage());
			return false;
		} finally {
			session.close();
		}

なぜ?save(user)再呼び出しuser.setJobNumberメソッドは、saveの後にuserがpersistentになっているため、このときのuserはデータベース内のレコードと管理されているか、Hibernateはデータベース内のシーケンス値をUserIDにセットしているので、userを実行します.setJobNumber(user.getUserID().toString());完全にユーザIDを取得することができ、再度、Hibernateはこの変更をデータベースのuser対応レコードにマッピングし、コミット後、userをdetachedに変更した後、HibernateはJobNumberの変化をデータベースにマッピングし、すなわち更新操作を行い、Hibernateが印刷したSQLからも実際の実行手順を見ることができる.
Hibernate: select USER_ID.nextval from dual
Hibernate: insert into t_user (address, age, college, department, education, email, headPic, height, identity, jobNumber, married, name, nickName, password, phoneNo, role, sex, status, title, userext, weight, userID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update t_user set jobNumber=? where userID=?
以上は本人の解決方法で、合理的で妥当かどうか、あるいは他にもっと良い解決策がありますか?