JPA отношение «многие ко многим» не вставляется в созданную таблицу в базе данных

#java #hibernate #jpa #orm #many-to-many

#Ява #зимовать #jpa #орм #многие ко многим

Вопрос:

User.java

 public class User implements Serializable{    private static final long serialVersionUID = 1L;    @Id  @GeneratedValue(strategy=GenerationType.IDENTITY)  @Column(name="ID_USER")  private Long idUser;  @Column(name="USERNAME")  private String username;  @Column(name="PASSWORD")  private String password;  @ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)  @JoinTable(  name = "USER_TECHNOLOGY",   joinColumns = @JoinColumn(name = "idUser") ,   inverseJoinColumns = @JoinColumn(name = "idTech")  )  private Listlt;Technologygt; techs = new ArrayListlt;Technologygt;();  @Column(name="INTEREST_FIELD")  private String interestField;  @Column(name="STATUT")  private boolean statut;  @Column(name="ACCOUNT_TYPE")  private String accountType; }  

Technology.java

 public class Technology implements Serializable{   private static final long serialVersionUID = 1L;  @Id  @GeneratedValue(strategy=GenerationType.IDENTITY)  @Column(name="ID_TECHNOLOGY")  private int idTech;  @Column(name="NAME_TECHNOLOGY")  private String nameTech; }  

Метод addTechnology

 public void addTechnology(User u,Technology t) {  EntityTransaction transaction = em.getTransaction();  transaction.begin();  try {  u.getTechs().add(t);  this.em.persist(t);  transaction.commit();  }catch(Exception e) {  transaction.rollback();  e.printStackTrace();  System.out.println("Erreur Add Technology");  }    }  

testEntities.java

 public static void main(String[] args) {   UserService us = new UserService();  User user1 = new User("username1","password1",true,"accountType1");  User user2 = new User("username2","password2",true,"accountType2");  User user3 = new User("username3","password3",true,"accountType3");  us.addUser(user1);  us.addUser(user2);  us.addUser(user3);  TechnologyService ts=new TechnologyService();  Technology tech1 = new Technology("JAVA");  Technology tech2 = new Technology("HIBERNATE");  Technology tech3 = new Technology("LARAVEL");  ts.addTechnology(user1, tech1);  ts.addTechnology(user2, tech2);  ts.addTechnology(user1, tech3);    System.out.println("--------techs---------");  for (Technology tech : user1.getTechs()) {  System.out.println(tech.getNameTech());  }   

the mapping table is generated but nothing is inserted in it hibernate log ==gt;

05 декабря 2021 года 1:30:27 УТРА org.hibernate.engine.транзакция.jta.платформа.внутренняя.JtaPlatformInitiator инициирует ИНФОРМАЦИЮ об услуге: HHH000490: Использование реализации JtaPlatform: [org.hibernate.engine.транзакция.jta.платформа.внутренняя.NoJtaPlatform] Спящий режим: вставка в значения ПОЛЬЗОВАТЕЛЯ (ТИП УЧЕТНОЙ ЗАПИСИ, ПОЛЕ ИНТЕРЕСОВ, ПАРОЛЬ, СТАТУС, ИМЯ ПОЛЬЗОВАТЕЛЯ) (?, ?, ?, ?, ?) Спящий режим: вставка в значения ПОЛЬЗОВАТЕЛЯ (ТИП УЧЕТНОЙ ЗАПИСИ, ПОЛЕ ИНТЕРЕСОВ, ПАРОЛЬ, СТАТУС, ИМЯ ПОЛЬЗОВАТЕЛЯ) (?, ?, ?, ?, ?) Спящий режим: вставка в значения ПОЛЬЗОВАТЕЛЯ (ТИП УЧЕТНОЙ ЗАПИСИ, ПОЛЕ ИНТЕРЕСОВ, ПАРОЛЬ, СТАТУС, ИМЯ ПОЛЬЗОВАТЕЛЯ) (?, ?, ?, ?, ?) 05 декабря 2021 года 1:30:27 орг.спящий режим.jpa.внутренний.util.LogHelper logpersistenceunitинформация ИНФОРМАЦИЯ: HHH000204: Обработка данных о сохраняемости [имя: UP_CAT] 05 декабря 2021 1:30:27 УТРА org.hibernate.engine.jdbc.соединения.внутренние.DriverManagerConnectionProviderImpl настроить ПРЕДУПРЕЖДЕНИЕ: HHH10001002: Использование встроенного пула подключений Hibernate (не для производственного использования!) 05 декабря 2021 года 1:30:27 УТРА организация.спящий режим.двигатель.jdbc.соединения.внутренние.DriverManagerConnectionProviderImpl ИНФОРМАЦИЯ о создателе сборки: HHH10001005: использование драйвера [com.mysql.cj.jdbc.Драйвер] по URL [jdbc:mysql://локальный хост:3306/JAVA_PROJECT] 05 декабря 2021 1:30:27 AM org.спящий режим.двигатель.jdbc.соединения.внутренние.DriverManagerConnectionProviderImpl ИНФОРМАЦИЯ о создателе: HHH10001001: Свойства подключения: {пароль=****, пользователь=root} 05 декабря 2021 1:30:27 УТРА org.hibernate.engine.jdbc.подключения.внутренние.DriverManagerConnectionProviderImpl ИНФОРМАЦИЯ о создателе: HHH10001003: Режим автоматической фиксации: ложь 05 декабря 2021 1:30:27 УТРА организация.спящий режим.двигатель.jdbc.соединения.внутренние.DriverManagerConnectionProviderImpl$ИНФОРМАЦИЯ о подключениях в пуле: HHH000115: Размер пула подключений в режиме гибернации: 20 (мин=1) 05 декабря 2021 г. 1:30:27 организация.спящий режим.диалект.Информация о диалекте: HHH000400: Использование диалекта: org.hibernate.диалект.MySQL5Dialect 05 декабря 2021 1:30:27 УТРА организация.спящий режим.ресурс.транзакция.серверная часть.jdbc.внутренняя.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection ИНФОРМАЦИЯ: HHH10001501: Соединение получено из JdbcConnectionAccess [org.hibernate.engine.jdbc.env.внутренний.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@546394ed] для (не JTA) выполнения DDL не было в режиме автоматической фиксации; Соединение «локальная транзакция» будет зафиксировано, и соединение будет переведено в режим автоматической фиксации. Спящий режим: изменить таблицу USER_TECHNOLOGY добавить ограничение fkhoytivrns26pg25co355p1fa внешний ключ (idTech) ссылается на ТЕХНОЛОГИЮ (ID_TECHNOLOGY) Спящий режим: изменить таблицу USER_TECHNOLOGY добавить ограничение FK4uc2lldfgi2eag02v34yes345 внешний ключ (идентификатор пользователя) ссылается на ПОЛЬЗОВАТЕЛЯ (ID_USER) 05 декабря 2021 г. 1:30:27 AM организация.спящий режим.механизм.транзакция.jta.платформа.внутренняя.JtaPlatformInitiator инициирует ИНФОРМАЦИЮ об услуге: HHH000490: Использование реализации JtaPlatform: [org.hibernate.engine.транзакция.jta.платформа.внутренняя.NoJtaPlatform] Спящий режим: вставка в значения ТЕХНОЛОГИИ (NAME_TECHNOLOGY) (?) Спящий режим: вставка в значения ТЕХНОЛОГИИ (NAME_TECHNOLOGY) (?) Спящий режим: вставка в значения ТЕХНОЛОГИИ (NAME_TECHNOLOGY) (?)

Комментарии:

1. @ManyToMany(mappedBy=»техники») личный списокlt;Пользовательgt; пользователи = новый списокlt;Пользовательgt;lt;Пользовательgt;();