ich eine solche Einheit Struktur habenHibernate Fehl bestehenden Feld
@MappedSuperclass
public abstract class Base {
UUID id;
}
@MappedSuperclass
public abstract class Parent<C extends Child> extends Base {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<C> children;
}
@MappedSuperclass
public abstract class Child<P extends Parent> extends Base {
@JoinColumn(name = "parent_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private P parent;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "ap")
public class AP extends Parent<AC> {}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "ac")
public class AC extends Child<AP> {}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "bp")
public class BP extends Parent<BC> {}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "bc")
public class BC extends Child<BP> {}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "cp")
public class CP extends Parent<CC> {}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "cc")
public class CC extends Child<CP> {
String value;
}
ich tun Kriterien Abfrage
CriteriaQuery<Long> cq = getEntityManager().getCriteriaBuilder().createQuery(Long.class);
Root<CP> rt = cq.from(CP.class);
Path child = rt.join("children");
final CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
cq.select(criteriaBuilder.count(rt));
cq.where(criteriaBuilder.equal(child.get("value"), "exists"));
TypedQuery<Long> q = getEntityManager().createQuery(cq);
Long res = q.getSingleResult()
und erhalten Fehler in Zeile mit where-Klausel:
java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [value] on this ManagedType [Base]
Nach einer während des Debuggens Ich habe herausgefunden, dass die Meta-Klasse "Eltern" im Entitätsmanager-Metamodell die Eigenschaften "Kinder" als "Liste der AC" behält. AC enthält offensichtlich kein Feld "value".
Haben Sie eine Idee, wie Sie diesen Fehler beheben können?