当前位置: 首页 > 知识库问答 >
问题:

如何在Spring DATA JPA中使用UUID生成器?

轩辕天佑
2023-03-14

我想加入两个模型,都使用org。冬眠主键的id.UUIDGenerator。但在启动时,我得到以下错误:

组织。冬眠工具模式。spi。CommandAcceptanceException:通过JDBC语句执行DDL“alter table user_role add constraint FK5scdquo6f12cpstqai86x4biw外键(roles_role_id)references role(role_id)”时出错

你知道我做错了什么吗?

我的代码:

用户模型:

@Entity
@Table
public class User implements Serializable {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "user_id", columnDefinition = "VARCHAR(255)")
    private String userId;

    @Column(name = "name")
    private String name;

    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "userId"), inverseJoinColumns = @JoinColumn(name = "roleId"))
    @ManyToMany
    private List<Role> roles;

    public User(){
        this.roles = new ArrayList<>();
    }
// Getter & Setter
}

榜样:

@Entity
@Table
public class Role implements Serializable {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "role_id", columnDefinition = "VARCHAR(255)")
    private String roleId;

    @Column(name = "role_name")
    private String name;

    @Column(name = "description")
    private String description;

    @ManyToMany(mappedBy = "roles")
    private List<User> users;

    public Role(){
        this.users = new ArrayList<>();
    }
// Getter & Setter
}

用户DAO:

public interface UserDAO extends JpaRepository<User, String > {
}

角色DAO:

public interface RoleDAO extends JpaRepository<Role, String > {
}

共有1个答案

司空学智
2023-03-14

联接列的名称应与列名类似,而不是与模型变量名类似。在你的情况下,你应该使用

joinColumns = @JoinColumn(name = "user_id")

inverseJoinColumns = @JoinColumn(name = "role_id"))

joinColumns = @JoinColumn(name = "userId")

inverseJoinColumns = @JoinColumn(name = "roleId"))

也对所有联接列执行此操作

 类似资料:
  • 我的印象是,UUID规范需要一个有保证的、真实的、全球唯一的结果,不是99.999999999999%的唯一结果,而是100%的唯一结果。从规格来看: UUID为128位长,可以保证跨空间和时间的唯一性。 看起来java只支持UUID规范的V3和V4。V4并不是真正独特的。对于使用< code > namuuidfrombytes 的V3实现,下面的结果是重复的,因为计算机太快了(编辑:循环到10

  • 我是xslt的新手。我想使用xslt生成32位长UUID并将其作为输入添加到xml中。我试图使用数学自由的随机函数,但得到错误。 输入XML XSLT代码段 我正在使用在线编辑器,但得到如下异常。http://xslttest.appspot.com/ 错误:找不到名为的匹配0参数函数{http://exslt.org/math}随机()。没有具有本地名称random的Saxon扩展函数 实际上,

  • 看完这篇博文https://blog . starkandwayne . com/2015/05/23/uuid-primary-keys-in-PostgreSQL/ 我想知道更多关于Django是如何生成uuid的,因为我用它们作为我的pk。嗯,根据文档,https://docs.djangoproject.com/es/1.9/ref/models/fields/#uuidfield,Dja

  • 问题内容: 我需要为数据库主键列生成唯一的Long ID。 我以为我可以使用 UUID.randomUUID()。getMostSignificantBits(), 但是有时它会产生一些负数,这对我来说也是个问题。 是否有可能仅从UUID生成正数长?会有数十亿个条目,因此我希望每个生成的键必须唯一。 问题答案: 之所以起作用,是因为当您按位与1进行操作时,它允许按原样传递同一位数字;当您按位与0进

  • 问题内容: 我正在尝试为我的Django对象获取唯一的ID。在Django 1.8中,它们具有UUIDField。我不确定如何使用此字段来为模型中的每个对象生成唯一的ID。 这是我对UUIDField的要求 我可以重现UUID模型的ID,但是每次我都得到完全相同的ID。:(。 例如: id然后每次都给我相同的id。怎么了,我该如何解决?感谢您的帮助! 问题答案: 我不确定为什么要创建UUID模型。