Hibernate を使用してオブジェクトをデータベースに保存すると、オブジェクト内の特定のフィールドがvarchar
データベースで定義されている最大長を超えているために失敗することがあります。
したがって、私は次のアプローチを使用しています。
- 保存しようとする
- を取得した場合
DataException
は、オブジェクト内のフィールドをデータベース定義で指定された最大長に切り詰めてから、再度保存を試みます。
ただし、切り捨て後の 2 回目の保存では、次の例外が発生します。
hibernate: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails
関連するコードは次のとおりです。何か問題があることに気づきましたか?
public static void saveLenientObject(Object obj){
try {
save2(rec);
} catch (org.hibernate.exception.DataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
saveLenientObject(rec, e);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void saveLenientObject(Object rec, DataException e) {
Util.truncateObject(rec);
System.out.println("after truncation ");
save2(rec);
}
public static void save2(Object obj) throws Exception{
try{
beginTransaction();
getSession().save(obj);
commitTransaction();
}catch(Exception e){
e.printStackTrace();
rollbackTransaction();
//closeSession();
throw e;
}finally{
closeSession();
}
}