Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate查询以从三个相关表中获取记录_Java_Hibernate_Orm - Fatal编程技术网

Java Hibernate查询以从三个相关表中获取记录

Java Hibernate查询以从三个相关表中获取记录,java,hibernate,orm,Java,Hibernate,Orm,我有三个对象:用户、联系人和操作 每个用户都有许多联系人,每个联系人都有许多操作 每个联系人和操作都有分配给他们的状态,例如20或60或。。。 请看一下数据模型 需求是获取具有特定状态的联系人,或者获取其操作具有该特定状态的联系人。 例如,给我状态为20的联系人,或其行为状态为20的联系人 目前,我有以下查询,它正在检索状态为20的联系人,并且不考虑操作的状态 使用者 以下是我的映射文件: User.hbm.xml <?xml version="1.0"?> <!DOCTYPE

我有三个对象:用户、联系人和操作

每个用户都有许多联系人,每个联系人都有许多操作

每个联系人和操作都有分配给他们的状态,例如20或60或。。。 请看一下数据模型

需求是获取具有特定状态的联系人,或者获取其操作具有该特定状态的联系人。 例如,给我状态为20的联系人,或其行为状态为20的联系人

目前,我有以下查询,它正在检索状态为20的联系人,并且不考虑操作的状态

使用者

以下是我的映射文件: User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.smallworks.model" schema="smallworksdb">
 <class name="User" table="USERACCOUNT">
  <id column="USER_ID" length="500" name="userID">
   <generator class="increment"/>
  </id>
  <property column="USER_FIRSTNAME" generated="never" lazy="false" length="100" name="userFirstName"/>
  <property column="USER_LASTNAME" generated="never" lazy="false"  length="100" name="userLastName"/>

  <set cascade="all" fetch="select" lazy="true" name="contactSet" sort="unsorted" table="USER_CONTACT">
   <key column="USER_ID"/>
   <many-to-many class="com.smallworks.model.Contact"
     column="CONTACT_ID" order-by="CONTACT_ID" unique="false"/>
  </set>

  <!-- one to many mapping with Action -->
  <set inverse="true" lazy="true" name="actionSet" sort="unsorted" order-by="ACTION_DUE_DATE" cascade="save-update">
   <key column="USER_ID"/>
   <one-to-many class="com.smallworks.model.Action"/>
  </set>

   <!-- one to one mapping with ContactCriteria -->
   <one-to-one name="contactCriteria" class="com.smallworks.model.ContactCriteria"
            cascade="save-update" lazy="false"></one-to-one>
   </class>
</hibernate-mapping>

在c.actions上添加外部联接作为a,并在a.status上添加或限制

从com.smallworks.model.User中选择不同的c作为u内部连接u.contactSet作为c左侧外部连接c.actionSet a其中u.userID=:userIDPara和(c.contactStatus in(:contactStatusPara)或a.actionStatus in(:actionStatusPara)

它抱怨“外部”org.hibernate.hql.ast.QuerySyntaxException:意外标记:第84列第1行附近的外部[
public class Contact implements Serializable {
    private Integer contactID;
    private Integer contactStatus = 0;
    private String  givenName;
    private String  familyName;
    private String  streetAddress;
    private Set<User> userSet = new HashSet<User>();
    private Set<Action> actionSet = new HashSet<Action>();
    .
    .
    .
    }
public class Action implements Serializable {
    private Integer actionID;
    private Integer actionStatus;
    private User    user;
    private String  actionNote;
    private Contact contact;
    .
    .
    .
    }
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.smallworks.model" schema="smallworksdb">
 <class name="User" table="USERACCOUNT">
  <id column="USER_ID" length="500" name="userID">
   <generator class="increment"/>
  </id>
  <property column="USER_FIRSTNAME" generated="never" lazy="false" length="100" name="userFirstName"/>
  <property column="USER_LASTNAME" generated="never" lazy="false"  length="100" name="userLastName"/>

  <set cascade="all" fetch="select" lazy="true" name="contactSet" sort="unsorted" table="USER_CONTACT">
   <key column="USER_ID"/>
   <many-to-many class="com.smallworks.model.Contact"
     column="CONTACT_ID" order-by="CONTACT_ID" unique="false"/>
  </set>

  <!-- one to many mapping with Action -->
  <set inverse="true" lazy="true" name="actionSet" sort="unsorted" order-by="ACTION_DUE_DATE" cascade="save-update">
   <key column="USER_ID"/>
   <one-to-many class="com.smallworks.model.Action"/>
  </set>

   <!-- one to one mapping with ContactCriteria -->
   <one-to-one name="contactCriteria" class="com.smallworks.model.ContactCriteria"
            cascade="save-update" lazy="false"></one-to-one>
   </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.smallworks.model" schema="smallworksdb">
 <class name="Contact" table="CONTACT">
  <id column="CONTACT_ID" length="500" name="contactID">
   <generator class="increment"/>
  </id>
  <property column="GIVEN_NAME" generated="never" lazy="false"
   length="100" name="givenName"/>
  <property column="FAMILY_NAME" generated="never" lazy="false"
   length="100" name="familyName"/>
  <property column="STREET_ADDRESS" generated="never" lazy="false"
   length="100" name="streetAddress"/>
  <property column="CONTACT_STATUS" generated="never" lazy="false"
   name="contactStatus" type="integer"/>

   <set inverse="true" lazy="false" name="userSet" sort="unsorted" table="USER_CONTACT">
    <key column="CONTACT_ID"/>
    <many-to-many class="com.smallworks.model.User" column="USER_ID" unique="false"/>
  </set>

  <!-- one to many mapping with Action -->
  <set inverse="true" lazy="true" name="actionSet" sort="unsorted" order-by="ACTION_DUE_DATE" cascade="save-update">
   <key column="CONTACT_ID"/>
   <one-to-many class="com.smallworks.model.Action"/>
  </set>
  </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.smallworks.model" schema="smallworksdb">
 <class name="Action" table="ACTION">
  <id column="ACTION_ID" length="500" name="actionID">
   <generator class="increment"/>
  </id>
  <property column="ACTION_STATUS" generated="never" lazy="false"
   name="actionStatus" type="integer"/>
  <!-- many to one mapping with Contact -->
  <many-to-one cascade="save-update"
   class="com.smallworks.model.Contact" column="CONTACT_ID" lazy="false"
   name="contact" not-null="true" />
  <!-- many to one mapping with User  -->
  <many-to-one class="com.smallworks.model.User" column="USER_ID"
   lazy="false" name="user" not-null="true"/>
 </class>
</hibernate-mapping>
Query query = session.createQuery("select distinct c FROM com.smallworks.model.User as u INNER JOIN u.contactSet as c WHERE u.userID=:userIDPara AND c.contactStatus in (:contactStatusPara)");
    query.setParameter("userIDPara", user.getUserID());
    query.setParameterList("contactStatusPara", statusList);
    contactList = query.list();