javax.persistence @Column сопоставление 2 столбцов двух разных таблиц

Я пытаюсь сопоставить Entity из 3 таблиц, используя аннотации @Entity, @Table, @SecondaryTables и @Column, как показано в следующем примере.

Таблицы: 1. employee (основной) 2. employee_detail 3. job_description

@Entity    
@Table(name="EMPLOYEE")    
@SecondaryTables({    
    @SecondaryTable(name="EMPLOYEE_DETAIL",    
        pkJoinColumns = @PrimaryKeyJoinColumn(name="EMPLOYEE_ID")),    
    @SecondaryTable(name="JOB_DESCRIPTION",    
        pkJoinColumns = @PrimaryKeyJoinColumn(name="JD_ID"))    
})
public class Employee {

    @Id
    @Column(name = "ID", table= "EMPLOYEE")
    private int id;

    @Column(name = "FIRST_NAME", table = "EMPLOYEE")
    private String firstname;

    @Column(name = "LAST_NAME", table = "EMPLOYEE")
    private String lastname;

    @Column(name = "BANK_ACCOUNT_NO", table = "EMPLOYEE_DETAIL") 
    private String bankacctnumber;

    @Column(name = "JOB_SUMMARY", table = "JOB_DESCRIPTION") 
    private String jobsummary;

    @Column(name = "     ???      ", table = "     ??        ")
    private String uniqueid;

    //getters and setters for above fields
    ...

}

Мой вопрос в том, хочу ли я создать поле "uniqueid" путем объединения

столбец "ID" в таблице "EMPLOYEE" И столбец "JOB_CODE" в таблице "JOB_DESCRIPTION"

Этот объект соответствует следующей строке запроса sql (для ясности я использовал построитель строк): -

StringBuilder sql = new StringBuilder();

sql.append("SELECT");
sql.append(" e.FIRST_NAME AS firstname,");
sql.append(" e.LAST_NAME AS lastname,");
sql.append(" d.BANK_ACCT_NUMBER AS bankacctnumber,");
sql.append(" j.JOB_SUMMARY AS jobsummary,");
sql.append(" CONCAT(e.ID,SUBSTR(j.JOB_CODE,3,8)) AS uniqueid"); 
sql.append(" FROM employee e");
sql.append(" LEFT JOIN employee_detail d ON d.EMPLOYEE_ID = e.ID");
sql.append(" LEFT JOIN job_description j ON j.JD_ID = e.JD_ID ");
sql.append(" WHERE e.ID = 1 ");

как именно должно быть выполнено сопоставление столбцов для поля «uniqueid»? Это возможно?


person lazyduckiy    schedule 11.01.2018    source источник


Ответы (1)


Нет, это невозможно, потому что JPA использует сопоставленные столбцы для чтения и записи. Таким образом, столбец не может быть объединен.

Но вы можете написать в своем классе простой метод, который объединяет поля.

Другой возможностью может быть представление, которое использует ваш оператор SQL, но тогда вы можете только читать, а теперь и писать, потому что представление содержит поля более чем одной таблицы.

person Simon Martinelli    schedule 11.01.2018
comment
Спасибо Саймон! Я попытаюсь добавить метод для объединения полей. - person lazyduckiy; 11.01.2018