【发布时间】:2014-08-20 20:10:06
【问题描述】:
我有 2 个相关的实体类,并且想定义另一个非实体类,它只包含 2 个实体类,以便我可以使用 HQL 通过 Join 加载 2 个实体类。以下是代码:
@Entity
@Table(name = "Conversation", schema = "aaa", catalog = "xxx")
public class Conversation implements Serializable {
private String conversationGuid;
...
}
@Entity
@Table(name = "Ticket", schema = "dbo", catalog = "MyTime")
public class Ticket implements Serializable {
private String ticketGuid;
private String conversationGuid;
...
}
非实体 POJO:
public class Conversation_Ticket {
private Conversation convo;
private Ticket ticket;
public Conversation_Ticket(Conversation convo, Ticket ticket) {
super();
this.convo = convo;
this.ticket = ticket;
}
}
DAO 进行 HQL 查询:
Configuration cfg = new Configuration().addFile("/Users/csi/git/mytime-acr/src/main/resources/Conversation_Ticket.hbm.xml");
Query query = getSession().createQuery(
"select new Conversation_Ticket(convo, tic)"
+ "from Conversation as convo left outer join fetch Ticket as tic on convo.Conversation_GUID = tic.Conversation_GUID where agentGuidCurrent = :agentGuid and workState = :workState");
query.setParameter("agentGuidCurrent", agentGuid);
query.setParameter("workState", workState);
List list = query.list();
当调用 createQuery() 时,它基本上会抛出以下异常: org.hibernate.hql.internal.ast.QuerySyntaxException: 路径需要加入! [从 com.cs.mytime.acr.model.Conversation 中选择新的 Conversation_Ticket(convo, tic) 作为 convo left outer join fetch Ticket as tic on convo.Conversation_GUID = tic.Conversation_GUID where agentGuidCurrent = :agentGuid and workState = :workState]
似乎 Hibernate 根本无法识别 Conversation_Ticket POJO,并期望 Conversation 和 Ticket 之间存在某种对象级别的关系。
Conversation_Ticket.hbm.xml 定义如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<import class="com.cs.mytime.acr.model.aggregate.Conversation_Ticket" />
</hibernate-mapping>
我确实尝试将 Conversation_Ticket.hbm.xml 作为映射资源放在 hibernate.cfg.xml 中,如下所示:
<mapping resource="/Users/csi/git/mytime-acr/src/main/resources/Conversation_Ticket.hbm.xml"/>
但它抱怨找不到 Conversation_Ticket.hbm.xml,即使我在环境的 CLASSPATH 中定义了 /Users/csi/git/mytime-acr/src/main/resources。
感谢任何可以给我一些关于如何解决这个问题的指示。谢谢。
【问题讨论】:
标签: hibernate