Иметь строковое имя в качестве идентификатора с JPA - PullRequest
0 голосов
/ 29 марта 2019

Что я хочу сделать, это изменить свой идентификатор с плавающей запятой на строку.

У меня есть этот объект, который представляет группу:

@Entity
@Table(name="group")
public class GroupEntity {

@Id
private String name;

@ManyToMany
private List<UserEntity> users;

И в моем файле начальной загрузки у меня есть это:

    Password p = new Password("test");

    UserEntity user = new UserEntity("pedro", p);
    List<UserEntity> users = new ArrayList<UserEntity>();

    List<GroupEntity> groupEntities=new ArrayList<GroupEntity>();

    users.add(user);

    GroupEntity r1 = new GroupEntity("Integrations");

    groupEntities.add(r1);
    user.getGroups().add(r1); //this user has a group

    r1.setUsers(users);  // this group has a user

Мой класс UserEntity выглядит так:

@Entity
@Table(name="user")
public class UserEntity {

@Id
@GeneratedValue
private Long id;

private String name;

При этом моя программа работает без проблем, вы можете видеть, что группы сохраняются с идентификатором, являющимся их именем:

enter image description here

Но когда я изменю класс UserEntity с этого на этот:

@Entity
@Table(name="user")
public class UserEntity {

@Id 
private String name;

Появляется эта ошибка:

org.springframework.beans.factory.BeanCreationException: ошибка создание компонента с именем bootstrap: сбой вызова метода init; вложенное исключение org.springframework.orm.jpa.JpaObjectRetrievalFailureException: невозможно найти com.alert.interservices.uaa.RoleEntity с идентификаторами интеграции; Вложенное исключение - javax.persistence.EntityNotFoundException: невозможно найти com.alert.interservices.uaa.RoleEntity с интеграцией идентификаторов

Я думаю, что проблема с идентификатором, но не знаю, как ее решить.

Обновление 1-application.properties:

spring.datasource.url=jdbc:h2:file:~/test2;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
spring.datasource.username=admin
spring.datasource.password=password
spring.h2.console.enabled=true

1 Ответ

0 голосов
/ 29 марта 2019

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

spring.jpa.hibernate.ddl-auto=create-drop

Но вы можете использовать его только для тестирования, но в производственной среде вы должны переключить его на spring.jpa.hibernate.ddl-auto=update. Примечание: опция update просто добавляет столбцы, но никогда не удаляет столбцы.

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