簡體   English   中英

未找到序列“HIBERNATE_SEQUENCE”; SQL 語句:select nextval ('hibernate_sequence')

[英]Sequence "HIBERNATE_SEQUENCE" not found; SQL statement: select nextval ('hibernate_sequence')

我只是在測試我的 UserRepo class,直到我收到標題中指定的錯誤。 一些信息:我的用戶表主鍵是用戶名(這是登錄到應用程序的用戶提供的字符串)。

我有一個 postgresql 的生產數據庫,所有這些都可以正常工作。 對於我的測試類,我使用的是 h2 數據庫。

我有一個用戶 class:

@Getter
@Setter
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "users")
public class User{
    @Id
    @NotBlank(message = "Username is required")
    private String username;
    @NotBlank(message = "Email is required")
    private String email;
    @NotBlank(message = "Password is required")
    private String password;

    @ManyToMany(cascade = CascadeType.ALL)
    private Collection<Role> roles = new ArrayList<>();

    private Instant created;
    private boolean enabled;
}

我沒有 userId,因為我希望用戶名是唯一的,所以我將其用作我的 ID。 我的測試 class:

@DataJpaTest
class UserRepoTest {

    @Autowired
    private UserRepo userRepo;

    @PersistenceContext
    private EntityManager entityManager;

    private static User userWithNameAdministrator;

    @BeforeAll
    static void beforeAll() {
        userWithNameAdministrator = UserBuilder.user("administrator", "admin@gmail.com", "administrator").buildUser();
    }

    @Test
    void itShouldfindByUsername() {
        // given
        User expectedUser = userWithNameAdministrator;
        userRepo.save(expectedUser);
        // when
        String username = expectedUser.getUsername();
        User actualUser = userRepo.findByUsername(username);
        // then
        assertThat(actualUser).usingRecursiveComparison()
                .isEqualTo(expectedUser);
    }

現在我的用戶構建器方法:

public static UserBuilder user(String username, String email, String role) {
        ArrayList<Role> roles = new ArrayList<>();
        roles.add(new Role(null, role));
        return user()
                .withUsername(username)
                .withEmail(email)
                .withEnabled(true)
                .withPassword("t")
                .withCreated(Instant.now())
                .withRoles(roles);
    }

這是Builder package中的另一個class。

最后是我的 RepoClass:

@Repository
public interface UserRepo extends JpaRepository<User, Long> {
    User findByUsername(String username);
}

在搜索 web 后,我發現 Hibernate 正在搜索一個序列,但由於我沒有 @GeneratedValue 注釋,它將使用默認值。 關於此有多個問題,但我似乎沒有找到一個帶有自定義 ID(字符串)而不是長 ID 的問題

請使用 SQL 創建序列。

創建序列 hibernate_sequence;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM