自分自身に関連付けられているクラスで問題が発生しています。オブジェクトそれはこれです:
Category.java
package com.borjabares.pan_ssh.model.category;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import com.borjabares.pan_ssh.util.Trimmer;
@Entity
public class Category {
private long categoryId;
private String name;
private Category parent;
public Category() {
}
public Category(String name, Category parent) {
this.name = name;
this.parent = parent;
}
@SequenceGenerator(name = "CategoryIdGenerator", sequenceName = "CategorySeq")
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "CategoryIdGenerator")
public long getCategoryId() {
return categoryId;
}
public void setCategoryId(long categoryId) {
this.categoryId = categoryId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = Trimmer.trim(name);
}
@ManyToOne(optional=false, fetch=FetchType.EAGER)
@JoinColumn(name="categoryId", insertable=false, updatable=false, nullable = true)
public Category getParent() {
return parent;
}
public void setParent(Category parent) {
this.parent = parent;
}
@Override
public String toString() {
return "Category [\ncategoryId=" + categoryId + ", \nname=" + name
+ ", \nparent=" + parent + "]";
}
}
アソシエーションは1レベルだけ深いです。挿入、およびその他のクエリが機能しています。しかし、親カテゴリのみまたは非親カテゴリを選択しようとすると、Hibernateは親カテゴリまたはテーブルのすべての結果に対して0の結果しか返しません。
現在のクエリはこのようなものですが、結合を使用する他の多くのクエリはnullであり、他のメソッドは常に同じ結果を取得します。
@SuppressWarnings("unchecked")
public List<Category> listParentCategories() {
return getSession().createQuery(
"SELECT c FROM Category c WHERE c.parent is null ORDER BY c.name")
.list();
}
ありがとう、そして私がこれを書いたかもしれない間違いをお詫びします。
編集:
挿入は正常に機能します。jUnitにすべてのカテゴリをリストして印刷すると、次のようになります。
Category [
categoryId=416,
name=Deportes,
parent=null],
Category [
categoryId=417,
name=Formula 1,
parent=Category [
categoryId=416,
name=Deportes,
parent=null]],
Category [
categoryId=418,
name=F?tbol,
parent=Category [
categoryId=416,
name=Deportes,
parent=null]]
挿入のほかに、カテゴリは親または子のみであり、カテゴリは彼自身の父親になることはできないことを制御しています。