この問題が以前に何度か尋ねられたことは承知しています。しかし、私は非常に異なるケースがあると信じています。現在、永続化時ではなく、 getResultList() メソッドを呼び出すときにこのエラーが発生しています。
私が使用していることに注意してください: -javaee6 -seam3-security -jboss7.1.3 -postgresql
一連のイベント: 1.) ログイン後、インターフェイス org.picketlink.idm.api.User を使用して picketlink にユーザーを保存しました。
setUser(new MyUser(user));
((MyUser)identity.getuser()).getUser(); を使用してユーザーを取得できるはずです。
2.) これで、AccounType との OneToMany 関係を持つ BusinessAccount エンティティができました。
@Entity
@Table(name = "T_ACCOUNT")
public class BusinessAccount extends BaseEntity {
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ACCOUNT_TYPE_ID")
private AccountType accountType;
}
@Entity()
@Table(name = "T_ACCOUNT_TYPE")
public class AccountType extends BaseEntity {
@Enumerated(EnumType.STRING)
@Column(name = "ACCOUNT_TYPE", length = 20)
private AccountTypeEnum accountTypeEnum;
}
私の問題は、サービスがあることです: getAccounts を呼び出す BaseService を拡張する BusinessAccountService で、次のエラーがスローされます。
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing
BaseService には次のものがあります。
public User getCurrentUser() {
if(currentUser==null){
try {
currentUser=((MyUser) identity.getUser()).getUser();
} catch(Exception e){
log.warn("getCurrentUser cannot retrieve current user from session identity and currentUser has not been set programmatically");
}
}
return currentUser;
}
そして、動的に生成されたクエリは次のようになります。
select distinct a from BusinessAccount a where a.accountType.accountTypeEnum=:a_accountType_accountTypeEnum and (a.accountType in (:a_accountType0))
Param name:a_accountType_accountTypeEnum value:serviceProvider
Param name:a_accountType0 value:[org.model.accounts.AccountType@1, org.model.accounts.AccountType@2]
そして、この行がエラーをスローしていることがわかりました:
and (a.accountType in (:a_accountType0))
何故ですか?getResultList() のみを実行しているときは?