Как использовать UUID Generator в Spring DATA JPA? - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу объединить две модели, обе используют org.hibernate.id.UUIDGenerator для первичного ключа. Но при запуске я получаю следующую ошибку:

org.hibernate.tool.schema.spi.CommandAcceptanceException: Ошибка при выполнении DDL "изменить таблицу user_role добавить ограничение FK5scdquo6f12cpstqai86x4biw внешний ключ роли) "через заявление JDBC

Знаете ли вы, что я делаю неправильно?

Мой код:

Модель пользователя:

@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 Ответ

0 голосов
/ 10 ноября 2019

Ваш столбец соединения должен иметь имя, подобное имени столбца, а не имя переменной модели. В вашем случае вы должны использовать

joinColumns = @JoinColumn(name = "user_id")

и

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

НЕ

joinColumns = @JoinColumn(name = "userId")

и

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

Также сделайте это для всехобъединить столбцы

...