У меня проблема в том, что мне нужно написать запрос критерия для выбора записей, в которых есть совпадение между столбцом PK в выбранной таблице и столбцом FK в таблице, которая используется для соединения, а также некоторыми предложениями where в поля в объединенной таблице.
Используемые лица: сотрудник, назначение сотрудника, подкомпания, филиал, назначение
Объекты, используемые в JOIN: назначение сотрудника и сотрудника
Описание юридических лиц: Сотрудник может быть частью большой компании / организации, которая разделена на подгруппы, в которых сотрудник может быть назначен. Каждый сотрудник может быть назначен нескольким дочерним компаниям, принадлежащим к разным филиалам с различным назначением.
Отношения между Employee и EmployeeAssignment - oneToMany.
SQL-запрос, который должен быть написан с использованием Criteria API
SELECT DISTINCT E.* FROM EMP E, EMP_ASSIGN EA
WHERE
E.ID = EA.EMP_ID AND (EA.SUB_COMP_ID IN (ACTUAL VALUES)
OR EA.BRANCH_ID IN (ACTUAL VALUES)
OR EA.DESG_ID IN (ACTUAL VALUES))
Employee.java
public class Employee{
private String id;
private String firstName;
private String lastName;
private Set<EmployeeAssignment> employeeAssignments;
//getters and setters
}
Employee.hbm.xml
<hibernate-mapping>
<class name = "Employee" table="EMP" >
<id name="id" column="ID"/>
<property name="firstName" column="FIRST_NAME"/>
<property name="lastName" column="LAST_NAME"/>
<set name="employeeAssignments" table="EMP_ASSIGN" inverse="true" fetch="join" cascade="save-update" lazy="true"
where="trunc(SYSDATE) BETWEEN strt_dt and end_dt">
<key>
<column name="EMP_ID" not null="true"/>
</key>
<one-to-many notfound="ignore" class="com.someorganization.entity.EmployeeAssignment"/>
</set>
</class>
</hibernate-mapping>
Таблица сотрудников
CREATE TABLE EMP(
ID VARCHAR(20) PRIMARY KEY,
FIRST_NAME VARCHAR(30) NOT NULL,
LAST_NAME VARCHAR(30) NOT NULL
);
EmployeeAssignment.java
public class EmployeeAssignment{
private String id;
private String employeeId;
private Date startDate;
private Date endDate;
private SubCompany company;
private Branch branch;
private Designation designation;
//getters and setters
}
EmployeeAssignment.hbm.xml
<hibernate-mapping>
<class name = "EmployeeAssignment" table="EMP_ASSIGN" >
<id name="id" column="ID"/>
<property name="employeeId" column="EMP_ID"/>
<property name="startDate" column="STRT_DATE"/>
<property name="endDate" column="END_DATE"/>
<many-to-one name="subCompany" lazy="false" class="com.someorganization.entity.SubCompany">
<column name="SUB_COMP_ID" not-null="false"/>
</many-to-one>
<many-to-one name="branch" lazy="false" class="com.someorganization.entity.Branch">
<column name="BRANCH_ID" not-null="false"/>
</many-to-one>
<many-to-one name="designation" lazy="false" class "com.someorganization.entity.Designation">
<column name="DESG_ID" not-null="false"/>
</many-to-one>
</class>
</hibernate-mapping>
Таблица назначения сотрудников
CREATE TABLE EMP_ASSIGN(
ID VARCHAR(20) PRIMARY KEY,
EMP_ID VARCHAR(20) NOT NULL,
STRT_DATE DATE,
END_DATE DATE,
SUB_COMP_ID VARCHAR(20) NOT NULL,
BRANCH_ID VARCHAR(20) NOT NULL,
DESG_ID VARCHAR(20) NOT NULL
FOREIGN KEY(EMP_ID) REFERENCES EMP(ID),
FOREIGN KEY(SUB_COMP_ID) REFERENCES SUB_COMP(ID),
FOREIGN KEY(BRANCH_ID) REFERENCES BRANCH(ID),
FOREIGN KEY(DESG_ID) REFERENCES DESG(ID))
SubCompany.java
public class SubCompany{
private String id;
private String subCompanyName;
//getters and setters
}
SubCompany.hbm.xml
<hibernate-mapping>
<class name = "SubCompany" table="SUB_COMP" >
<id name="id" column="ID"/>
<property name="subCompanyName" column="COMPANY_NAME"/>
</class>
</hibernate-mapping>
Таблица подкомпаний
CREATE TABLE SUB_COMP(
ID VARCHAR(20) PRIMARY KEY,
COMPANY_NAME VARCHAR(30) NOT NULL
);
Branch.java
public class Branch{
private String id;
private String branchName;
//getters and setters
}
Branch.hbm.xml
<hibernate-mapping>
<class name = "Branch" table="BRANCH">
<id name="id" column="ID"/>
<property name="branchName" column="BRANCH_NAME"/>
</class>
</hibernate-mapping>
Таблица отделений
CREATE TABLE BRANCH(
ID VARCHAR(20) PRIMARY KEY,
BRANCH_NAME VARCHAR(30) NOT NULL
);
* * Designation.java тысяча сорок-девять
public class Designation{
private string id;
private String designationName;
//getters and setters
}
Designation.hbm.xml
<hibernate-mapping>
<class name = "Designation" table="DESG">
<id name="id" column="ID"/>
<property name="designationName" column="DESG_NAME"/>
</class>
</hibernate-mapping>
Таблица обозначений
CREATE TABLE DESG(
ID VARCHAR(20) PRIMARY KEY,
DESG_NAME VARCHAR(30) NOT NULL
);
Мне нужна помощь в написании запроса критериев с использованием предоставленного SQL.