Работа с отношениями в ORM - PullRequest
       25

Работа с отношениями в ORM

0 голосов
/ 30 сентября 2011

Какое наилучшее / распространенное решение (лучшие практики) для работы с отношениями в ORM (с точки зрения долгосрочного проекта)?

1) Например, У меня есть схема Oracle HR. Можно ли создавать отношения между всеми объектами (объектами) там, где это возможно, или только между объектами, которые мне действительно нужны сейчас (и меняются в будущем)?

@Entity
public class Employee {
    @Id
    private long employeeId;
    @ManyToOne((fetch = FetchType.LAZY)
    private Job job;
}

@Entity
public class Job {
    @Id
    private String jobId;
    @OneToMany(fetch = FetchType.LAZY)
    private List<Employee> employeeList;
}

2) Как мне сохранить / установить нового сотрудника с существующим или новым заданием? У нас есть сущность Employee со String jobId, а также создана переменная задания Job job:

@Entity
public class Employee {
    @Id
    private long employeeId;
    private String jobId;
    @ManyToOne((fetch = FetchType.LAZY)
    private Job job;
}

Наихудшие решения задаются обоими параметрами каждый раз:

Job job = new Job();
job.setJobId("JOB_01");
Employee employee = new Employee();
employee.setEmployeeId(1L)
employee.setJobId(job.getJobId());

Немного лучшими решениями является повторная реализация метода setJobId () в классе Employee (должен быть также некоторый код, чтобы узнать, существует ли упомянутое задание или нет):

public void setJobId(String jobId) {
    if (getJob() == null) {
        this.jobId = jobId;
        job = new Job();
        job.setJobId(jobId);
    } else {
        this.jobId = getJob().getJobId();
    }
}

1 Ответ

1 голос
/ 30 сентября 2011

Если вам не нужна ассоциация, вам не нужно ее добавлять.Тем не менее, обратите внимание, что даже если он не используется непосредственно в коде Java, ассоциация все же может быть полезна только для возможности ее обхода в JPQL или критериальных запросах.

Что касается поля jobId, его следует просто удалить изEmployee сущность.У сотрудника есть работа, и вы можете получить доступ к его идентификатору, используя employee.getJob().getId().Вы не должны быть в состоянии установить идентификатор работы сотрудника.Вместо этого вы должны получить или создать работу (на уровне обслуживания) и установить работу сотрудника, используя setJob(job).

...