2015-08-07 2 views
0

У меня есть два класса, таблицы которых имеют двунаправленную связь друг с другом. Сотрудник может быть связан с несколькими категориями услуг и наоборот. Таблица соединений объявляется в классе Категории сервисов.Весна Многие из многих двунаправленных данных сохранения

Когда я хочу, чтобы сохранить объект Employee, то ничего не будет сохранен в соединительной таблице, но если я пытаюсь напечатать связанные сотрудников категории услуг, то я получаю все детали

if(employee.getServiceCategories()!= null && employee.getServiceCategories().size()>0){ 
    for(ServiceCategory serviceCategory : employee.getServiceCategories()){ 
    logger.debug("employee's serviceCategory id : " + serviceCategory.getId()); 
    logger.debug("employee's ServiceCat Name : " + serviceCategory.getServiceCatName()); 
    } 
} 

Сотрудник .java

@Entity 
@Table(name = "employee") 
public class Employee extends BaseEntity { 
    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToMany(mappedBy="employees") 
    private List<ServiceCategory> serviceCategories = new ArrayList<>(); 
} 

ServiceCategory.java

@Entity 
@Table(name = "servicecategory") 
public class ServiceCategory extends BaseEntity { 
    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ManyToMany(targetEntity = Employee.class, cascade = { CascadeType.ALL }) 
    @JoinTable(name = "servicecategory_employee", joinColumns = { @JoinColumn(name = "servicecatid") }, inverseJoinColumns = { @JoinColumn(name = "empid") }) 
    private List<Employee> employees = new ArrayList<>(); 
} 

Спасибо за вашу помощь.


UPDATE

Я изменил код в Employee.java к

@ManyToMany(mappedBy="employees", cascade = CascadeType.ALL) 
private List<ServiceCategory> serviceCategories = new ArrayList<>(); 

Также я сейчас, используя следующий код при сохранении Служащий в моей DAO класса `

public void addEmployee(Employee employee) throws SmrException { 
     Session session = this.sessionFactory.getCurrentSession(); 
     session.merge(employee); 
     logger.info("Employee saved successfully, employee Details=" 
       + employee); 
    } 

Но результат остается таким же. Я не могу сохранить данные в таблице соединений

+0

Вам нужно иметь '@ManyToMany (cascade = CascadeType.ALL)' в поле 'serviceCategories' в классе' Employee'. – manish

+0

@manish Пожалуйста, посмотрите на обновление и предложите. Еще раз спасибо –

ответ

0

Вы устанавливаете обратную сторону ассоциации (та, которая имеет атрибут mappedBy). JPA рассматривает только сторону владельца (один без атрибут mappedBy).

Необходимо добавить сотрудника во все его категории услуг, а не просто добавлять категории услуг к сотруднику.

+0

Я понимаю, что это обратная сторона ассоциации. Но не существует способа, которым я могу сделать это возможным, поскольку я хотел бы сделать ServiceCategory владельцем. –

+0

Способ сделать то, что я сказал вам в своем ответе: 'for (ServiceCategory sc: employee.getServiceCategories()) {sc.addEmployee (сотрудник); } ' –

Смежные вопросы