JPA каскад сохраняется - много к одному - PullRequest
9 голосов
/ 13 августа 2011

У меня отношения много-к-одному, и я пытаюсь сохранить дочернюю сущность.

public class Office
{
public int id;
public int grades;
@OneToMany
public set<Employee> employees;
}

public class Employee{
@GeneratedValue(strategy=GeneratedValue.identity)
public int empid;
@ManyToOne(cascade=cascadeType.ALL)
public Office office;
}

Идентификатор Office уже присутствует в базе данных. Но работника нет. Теперь, если я добавляю сотрудника и его оценки должны войти в базу данных офиса.

Когда я делаю следующую операцию, оценки не сохраняются

Office office = new Office();
office.setId(23);
office.setGrades(5);
employee.setOffice(office);
em.persist(employee);

Как сохранить оценки в офисном столе за одну операцию

1 Ответ

16 голосов
/ 13 августа 2011

Во-первых, исправьте ваше отображение.

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

@OneToMany(mappedBy = "office")
public set<Employee> employees;

Сотрудник является только одним изсотрудники офиса.Вы действительно хотите удалить весь офис, когда вы удаляете одного сотрудника?Если нет, то почему вы ставите cascade=cascadeType.ALL на @ManyToOne?Эти аннотации имеют последствия.Не используйте их, не понимая их.

Теперь, чтобы действительно ответить на вопрос.Если офис уже существует в базе данных, вы не должны создавать новый.Идите, извлеките его из базы данных и обновите его:

Office office = em.find(Office.class, 23);
// office is now attached, and any change you make on the entity will be written to the database
office.setGrade(5);

Теперь вы также можете прикрепить офис к новому сотруднику.Но поскольку это двунаправленное отношение, вам также следует инициализировать другую сторону ассоциации, чтобы сохранить целостность графа объекта:

employee.setOffice(office);
office.addEmployee(employee);
em.persist(employee);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...