2016-02-06 4 views
0
Select * from Table A left join Table B on A.id=B.id and A.langCode='IN'; 

где «IN» вводится пользователем.Как написать следующий запрос в спящем режиме

Таблица A и таблица B имеют сопоставление для идентификатора, но нет сопоставления с LangCode между ними, поскольку в таблице B dosent есть столбец с именем langCode для сопоставления, я хочу написать следующий запрос, используя критерии спящего режима без отображения langcode.

Таблица: Сотрудник: EMP_ID - первичный ключ, NAME, CONTACT_DETAILS

Таблица: Employee_Lang: EMP_ID- составной первичный ключ, LANG_CODE- составной первичный ключ, ИМЯ

Фактический запрос:

Select * from Employee Emp left outer join Employee_Lang EmpLang on Emp.EMP_ID=EmpLang.EMP_ID AND EmpLang.LANG_CODE='IN' 

Я отобразил только Emp_Id как первичный ключ от обоих e таблицы в спящем режиме, поэтому критерии спящего режима будут применять только соединение на этом И не на LangCode.

Примечание: - Я не могу изменить отображение спящего режима и могу использовать только критерии спящего режима в соответствии с требованиями клиентов, пожалуйста, помогите мне в этом.

+0

Не могли бы вы добавить свои объекты А и код B с полями , –

+0

Привет, я добавил изменения, не могли бы вы помочь мне на этом –

+0

Я имел в виду классы Java A и B, вы могли бы добавить их? –

ответ

0

Например у вас есть две модели:

@Entity 
class Employee { 
    @Id 
    private Long id; 
    @OneToOne 
    private EmployeeLang employeeLang; 
    ... 
} 
@Entity 
class EmployeeLang { 
    @Id 
    private Long id; 
    private String langCode; 
    @OneToOne 
    private Employee employee; 
    ... 
} 

Вы должны иметь некоторое соответствие между ними, а затем вы можете сделать следующие критерии:

Criteria criteria = session.createCriteria(Employee.class); 
criteria.createAlias("employeeLang", "empLang"); // inner join with EmployeeLang 
criteria.add(Restrictions.eq("empLang.langCode", "in"); 

List<Employee> employees = criteria.list(); 
Смежные вопросы