私は非常に単純なエンティティオブジェクトを持っています。私が悩んでいるのは、DBからUserオブジェクトを取得し、そのユーザーオブジェクト内のユーザー役割にアクセスしたい別のメソッドに渡すときです。有名なものを取得しています。プロキシのHibernate Exceptionを初期化できませんでした。Hibernateは別のセッションでオブジェクトを初期化します
Ex。方法1:
- open session, open transaction
- fetch user
- close transaction, close session
今、私はこれを推測している2
- open session, open transaction
- do Hibernate.initialize(user.getUserRole()) --> here it breaks
- close transaction, close session
方法に、そのユーザオブジェクトを渡すには、あなたが新しいセッションにオブジェクトを初期化することはできませんが、私は、なぜ分からない、いくつかの休止状態機能です。これには何か解決策はありますか?
PS。私は<property name="hibernate.enable_lazy_load_no_trans">true</property>
について読んだことがありますが、この縫い目は普通のことのようであり、このオプションをオンにする必要はありません。
EDIT:コード例:
ゲッタとユーザクラスのセッターUserRoles
private Integer id;
private String description;
private Character active;
private Set userses = new HashSet(0);
の
@ManyToOne(fetch = FetchType.LAZY, targetEntity = UserRoles.class)
@JoinColumn(name = "USER_ROLE_ID", nullable = false)
public UserRoles getUserRoles() {
return this.userRoles;
}
public void setUserRoles(UserRoles userRoles) {
this.userRoles = userRoles;
}
フィールド方法1
public static void method1() {
Users user = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
String hqlQuery = "FROM Users WHERE userName = :userName";
Query query = session.createQuery(hqlQuery);
query.setParameter("userName", userName);
List<Users> list = query.list();
for (Users u : list) {
user = u;
break;
}
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
Logging.handleExceptionLogging(e);
} finally {
session.close();
}
method2(user);
}
方法だから、基本的に2
public static method2(Users user) {
if (user != null) {
if (Hibernate.isInitialized(user.getUserRoles())) {
if (user.getUserRoles().getDescription() != null && user.getUserRoles().getDescription().toLowerCase().equals("admin"))
returnValue = true;
} else {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Hibernate.initialize(user.getUserRoles()); // this line causes Exception
if (user.getUserRoles().getDescription().toLowerCase().equals("admin"))
returnValue = true;
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
Logging.handleExceptionLogging(e);
} finally {
session.close();
}
}
}
}
たぶんあなたのエンティティを投稿し、uはフェッチするために呼び出す方法? – olexity
私はコード例(ほとんどの部分)、tnx – hyperion385