Установка / Получение внешнего ключа в Hibernate & Java - PullRequest
0 голосов
/ 26 марта 2012

Довольно уверен, что это тривиально, но не может найти прямой ответ.У меня есть таблицы Dept / Emp.Где dept_id в таблице emp - это внешний ключ.Это классическое отношение один ко многим.В веб-приложении на странице нового сотрудника отдел представляет собой элемент управления Select, в котором перечислены доступные отделы.Когда пользователь отправляет страницу, у меня есть данные Emp и идентификатор отдела.Но я не могу установить идентификатор Dept для класса Emp, потому что нет установщика или получателя для идентификатора Dept в классе Emp!

Как лучше всего справиться с этим?

Iиспользую Struts2 2.1.8 / hibernate 3.x / tomcat 6.0.26 / MySQL 5.5.x

Ответы [ 4 ]

0 голосов
/ 30 октября 2013

Из этого вопроса я понял, что вы, возможно, неправильно настроили свой компонент. Вам нужно будет определить отображение ORM в ваших bean-компонентах следующим образом:

@Entity
@Table(name = "EmployeeMaster")
public class empBean {

@Column(name = "Name", nullable = false)
private String name;

@Column(name = "departmentFkId", insertable = true, updatable = true)
private Long departmentFkId;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "departmentFkId", insertable = false, updatable = false)
private DepartmentMasterBean department;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
public DepartmentMasterBean getDepartment() {
    return department;
}

public void setDepartment(DepartmentMasterBean department) {
    this.department = department;
}

public Long getDepartmentFkId() {
    return departmentFkId;
}

public void setDepartmentFkId(Long departmentFkId) {
    this.departmentFkId = departmentFkId;
}
}

Теперь вы можете установить данные отдела (empBean.setDepartmentFkId), и hibernate будет обрабатывать оставшуюся часть сохранения через сеанс (session.saveOrUpdate(empBean)).

0 голосов
/ 26 марта 2012

Вы можете сделать в Service Layer

service.add(employee, id);

в Service.add(Employee employee, String id)

public void add(Employee employee, String id) {
    Department department = session.get(Department.class, id);
    employee.setDepartment(department);
    session.persist(employee);
}

Но вам нужен сеттер в классе Employee, чтобы установить Department

сотрудника.
0 голосов
/ 26 марта 2012

У вас есть два отдела, старый, к которому раньше принадлежал Эмп, и новый, который пользователь выбрал, к которому теперь принадлежит Эмп. У каждого из двух отделов есть набор со всеми принадлежащими им сотрудниками.

В одной транзакции вы удаляете Emp из набора сотрудников в старом отделе, добавляете его в набор сотрудников в новом отделе и обновляете эти два отдела с помощью session.update (Dept). Если у вас нет каскада для сотрудников, вам также необходимо обновить Emp.

Это выглядит более сложным, но в этом случае наборы Employee в обоих отделах по-прежнему правильны, и на стороне базы данных это должно привести только к одному оператору SQL.

0 голосов
/ 26 марта 2012

у вас должен быть набор Emp в отделе. И если один emp может существовать в одном отделе, то в emp будет много к одному из отделов, но если один emp может существовать более чем на один отдел, чем вам потребуется набор отдела в Emp.

Пожалуйста, обратитесь, как определить отображение коллекции в спящем режиме ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...