私は意図的エンティティは、私は有名な一時的なインスタンスのエラーを取得することを更新しようその後、多対1の関連をフェッチしていないとしてエンティティ(行)を取得:オブジェクト オブジェクト参照に保存されていない一時的なインスタンスを更新多対1で動作しない(一時インスタンス)休止状態のStatelessSession更新?
エラー -
をフラッシュする前に、一時的なインスタンスを保存するが、その「一時的なインスタンスは、」フェッチはなかったので、でも、過渡することはできません
コード:
ProductFamily - Javaコード
public class ProductFamily
{
private Integer id;
private Company company;
private String name;
//autogenerated getter & setter and constructors
}
ProductFamily - のhbm.xml
<hibernate-mapping>
<class name="package.ProductFamily" table="product_family" catalog="db">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="company" class="package.Company" fetch="select">
<column name="company" not-null="true"/>
</many-to-one>
<property name="name" type="string">
<column name="name" length="64" not-null="true"/>
</property>
</class>
</hibernate-mapping>
会社 - Javaコード
public class Company
{
private String name;
private Set<ProductFamily> productFamilies = new HashSet<ProductFamily>(0);
//autogenerated getter & setter and constructors
}
会社 - のhbm.xml
<!-- same header as above -->
<hibernate-mapping>
<class name="package.Company" table="company" catalog="db">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="64" not-null="true"/>
</property>
<set name="productFamilies" table="product_family" inverse="true" lazy="true" fetch="select">
<key>
<column name="company" not-null="true"/>
</key>
<one-to-many class="package.ProductFamily" />
</set>
</class>
</hibernate-mapping>
テスト方法簡単な検索と変更と更新
public void test()
{
final StatelessSession session = this.sessionFactory.openStatelessSession();
//get
final ProductFamily productFamily = (ProductFamily)session.get(ProductFamily.class, 1);
//change primitive property
productFamily.setName(productFamily.getName() + "x");
//update
final Transaction tr = session.beginTransaction();
try
{
session.update(productFamily);
tr.commit();
}
catch (HibernateException e)
{
logger.severe(e.getMessage() + "\n" + e.getStackTrace());
try
{
if(tr != null
&& tr.isActive())
tr.rollback();
}
catch (HibernateException eTr)
{
logger.severe(eTr.getMessage() + "\n" + eTr.getStackTrace());
}
}
finally
{
session.close();
}
}
コードを表示してください。意図的にアンペアされた関連付け、エンティティの変更および「更新」に関する部分。 –
同じエラーが発生する単純な例を追加しました。 – djmj