Мне нужна помощь в решении этой ошибки исключения JDBC, кто-нибудь знает, как решить эту проблему? - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу создать новый объект Role в методе контроллера, который затем отображает все «роли» из хранилища данных, которое связано с базой данных Hibernate / H2, но каждый раз, когда я пытаюсь создать новый объект, я получаю SQLошибка, которая мне не кажется правильной.Если кто-то может помочь, это было бы здорово.

Вот репозиторий - https://github.com/danielturato/InstaTeam-th

Для роли субъекта я пробовал это:

  1. Изменено @NotEmptyнад полем имени для @NotNull и наоборот
  2. Добавлены и удалены переопределенные методы Equals, HashCode и toString
  3. Добавлен класс построителя в роли (не работает)

Role.java

@Entity
public class Role {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@NotEmpty
private String name;

public Role() {}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Role role = (Role) o;
    return id == role.id &&
            Objects.equals(name, role.name);
}

@Override
public int hashCode() {
    return Objects.hash(id, name);
}

@Override
public String toString() {
    return "Role{" +
            "id=" + id +
            ", name='" + name + '\'' +
            '}';
}

RoleController.java:

@Controller
public class RoleController {

@Autowired
private RoleServiceImpl roleService;

@RequestMapping("/roles")
public String viewAllRoles(ModelMap model) {
    Role r = new Role();
    r.setName("test");
    roleService.save(r);
    List<Role> roles = roleService.findAll();
    model.put("roles", roles);

    if (!model.containsAttribute("role")) {
        model.put("role", new Role());
    }

    return "roles";
}

Ожидается:

  • Когда я иду в / ролей, новыйРоль будет создаваться каждый раз, и тогда все роли, уже имеющиеся в базе данных, будут отображаться на веб-странице

Факт:

  • Я получаю ошибку

1 Ответ

0 голосов
/ 23 декабря 2018

Похоже, проблема в системной последовательности по умолчанию.Вы можете создать отдельную последовательность и вместо GenerationType.IDENTITY использовать GenerationType.SEQUENCE.

CREATE SEQUENCE role_seq START WITH 1 INCREMENT BY 1;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "roleSeq")
@SequenceGenerator(name = "roleSeq", sequenceName = "role_seq", allocationSize = 1)
private int id;

, дайте мне знать, если это работает.

...