多态条件不带反比关系的查询
2022-09-03 15:31:53
我有以下EJB结构。不要奇怪和,这些类只是在这里以简化的方式演示结构(更新:我已经修改了类名以构建一个更易于理解的示例。的另一个实现可能是 )。请注意,从 到 或 没有反关系,让我们假设 是唯一的。我阅读了使用条件查询检索多态休眠对象和休眠多态查询,但这些讨论似乎没有回答我的问题。Animal
Inventory
IdTag
BarcodeId
IdTag
Animal
Inventory
RfidTag.code
public interface ItemWithIdTag
{
IdTag getIdTag();
void setIdTag(IdTag idTag);
}
@Entity public class Animal implements ItemWithIdTag,Serializable
{
@Id @GeneratedValue(strategy=GenerationType.AUTO) private long id;
@OneToOne(cascade = CascadeType.ALL)
private IdTag idTag;
}
@Entity public class Inventory implements ItemWithIdTag,Serializable
{
@Id @GeneratedValue(strategy=GenerationType.AUTO) private long id;
@OneToOne(cascade = CascadeType.ALL)
private IdTag idTag;
}
@Entity @Table(name = "IdTag") @Inheritance(strategy= InheritanceType.JOINED)
public class IdTag implements Serializable
{
@Id @GeneratedValue(strategy=GenerationType.AUTO) private long id;
private Date created;
}
@Entity @Table(name = "RfidTag")
public class RfidTag extends IdTag implements Serializable
{
private String code;
}
现在我想查询任何一个或一个给定的喜欢Animal
Inventory
RfidTag.code
Animal ejb = bean.fEntityWithRfidTag(Animal.class,"myRfIdCode");
public <T extends ItemWithIdTag> T fOwner(Class<T> type, String catName)
{
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(type);
Root<T> from = criteriaQuery.from(type);
Path<Object> path = from.join("idTag").get("code");
CriteriaQuery<T> select = criteriaQuery.select(from);
select.where(criteriaBuilder.equal(path, catName));
TypedQuery<T> q = em.createQuery(select);
T result = (T)q.getSingleResult();}
return result;
}
不幸的是,我得到了以下错误:
javax.ejb.EJBException: java.lang.IllegalArgumentException:
Unable to resolve attribute [code] against path [null]
我假设这与继承 ->有关,并且只知道 而不是 .这样的查询是可能的吗?IdTag
RfidTag
Animal
IdTag
RfidTag.code