「親」という名前のテーブルを持つデータベースにアクセスする Web アプリケーションがあります。この親には、さらに多くの子の親になることもできる子があります。
public class Thing extends Entity{
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "parent_id")
private List<Thing> children = new ArrayList<Thing>();
@Column
private String property;
public String getProperty() { return property; }
public void setProperty(String property) { this.property = property; }
エンティティは PK プロパティを持っています:
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
ここで、HQL クエリから Thing の parent_id プロパティにアクセスしたいと考えています。私がそうするなら:
[Another class]
Query queryParents = getEntityManager().createQuery("from Thing t where t.parent_id is null");
プロパティが存在しないというエラーが表示されます。さて、Thing クラスに以下を追加します。
@Column
private Long parent_id;
public Long getParent_id() { return parent_id; }
public void setParent_id(Long parent_id) { this.parent_id = parent_id; }
それは機能しているようですが、同じエンティティを参照していないため、正しくないと思います...実際、モノのオブジェクトを更新しようとすると、「org.hibernate.StaleObjectStateException: 行が更新されました。または別のトランザクションによって削除されました (または未保存値のマッピングが正しくありませんでした): ...".
では、クラス Thing 自体がプロパティを取得していない場合、エンティティ "Thing" [データベースにはオブジェクト Thing の列 'parent_id' があります] の parent_id プロパティを返す正しい方法は何ですか? 私はこれらすべての初心者です...データベースには、すべてのモノのparent_idフィールドがあり、ルートの親の場合はnullであり、他のすべての親のIDが含まれています。
前もって感謝します。