使用JPA将字符串名称作为ID

时间:2019-03-29 11:19:18

标签: java spring spring-boot spring-mvc jpa

我想要做的是将我的id从float更改为字符串。

我有一个代表团体的实体:

def restartSim():
        """Restarts the current program.
        Note: this function does not return. Any cleanup action (like
        saving data) must be done before calling this function."""
        python = sys.executable
        os.execl(python, python, * sys.argv)

在我的引导文件中,我有这个:

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

@Id
private String name;

@ManyToMany
private List<UserEntity> users;

我的UserEntity类如下:

    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

这样,我的程序就可以正常工作了,您可以看到以ID为名称保存的组:

enter image description here

但是当我将UserEntity类从该类更改为这一类时:

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

@Id
@GeneratedValue
private Long id;

private String name;

出现此错误:

  

org.springframework.beans.factory.BeanCreationException:错误   创建名称为'bootstrap'的bean:调用init方法失败;   嵌套异常为   org.springframework.orm.jpa.JpaObjectRetrievalFailureException:无法   查找ID为Integrations的com.alert.interservices.uaa.RoleEntity;   嵌套的异常为javax.persistence.EntityNotFoundException:无法   找到ID为Integrations的com.alert.interservices.uaa.RoleEntity

我认为问题出在id上,但不知道如何解决。

更新1-application.properties:

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

@Id 
private String name;

1 个答案:

答案 0 :(得分:0)

首先,是的,您可以将String用作ID类型。但是我认为您的问题是您在编辑实体时未删除旧数据库,因此要避免该问题,您必须在持久性单元中更改策略以进行删除和创建,因为您正在使用spring数据,因此可以使用:

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

但是您可以将其仅用于测试,但是在生产环境中,必须将其切换为spring.jpa.hibernate.ddl-auto=update. 注意:update选项只会添加列,而不会删除列。