Моя база данных содержит 3 таблицы: сущности User и Service имеют отношение «многие ко многим» и объединены с таблицей SERVICE_USER следующим образом:
ПОЛЬЗОВАТЕЛИ - SERVICE_USER - УСЛУГИ
Таблица SERVICE_USER содержит дополнительный столбец BLOCKED.
Как лучше всего выполнить такое сопоставление? Это мои классы сущностей
@Entity
@Table(name = "USERS")
public class User implements java.io.Serializable {
private String userid;
private String email;
@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}
.... some get/set methods
}
@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;
@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}
Я последовал этому примеру http://giannigar.wordpress.com/2009/09/04/m ... using-jpa / Вот тестовый код:
User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");
CmsService service= new CmsService("cd2","name2");
List<UserService> userServiceList = new ArrayList<UserService>();
UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);
userDAO.save(user);
Проблема в том, что в спящем режиме сохраняется объект User и объект UserService. Нет успеха с объектом CmsService
Я пробовал использовать EAGER fetch - без прогресса
Можно ли добиться ожидаемого поведения с помощью приведенного выше сопоставления?
Может быть, есть какой-нибудь более элегантный способ сопоставить таблицу соединения многие-многие с дополнительным столбцом?
@ElementCollection
из одного (или обоих) объектов User и Service.[userFK, serviceFK]
, используйте уникальное ограничение.Я ищу способ сопоставить таблицу ассоциации "многие ко многим" с дополнительными столбцами с гибернацией в конфигурации файлов xml.
Предполагая, что у есть две таблицы 'a' и 'c' со связью многие ко многим со столбцом с именем 'extra'. Потому что я не нашел полного примера, вот мой код. Надеюсь, это поможет :).
Во-первых, это объекты Java.
Теперь нам нужно создать ассоциативную таблицу. Первый шаг - создать объект, представляющий сложный первичный ключ (a.id, c.id).
Теперь создадим сам объект ассоциации.
На этом этапе пришло время сопоставить все наши классы с конфигурацией hibernate xml.
A.hbm.xml и C.hxml.xml (тише то же самое).
И затем файл сопоставления ассоциаций, a_c.hbm.xml.
Вот образец кода для тестирования.
источник
Как было сказано ранее, с JPA, чтобы иметь возможность иметь дополнительные столбцы, вам нужно использовать две ассоциации OneToMany вместо одной связи ManyToMany. Вы также можете добавить столбец с автоматически созданными значениями; таким образом, он может работать как первичный ключ таблицы, если это необходимо.
Например, код реализации дополнительного класса должен выглядеть так:
источник