![](/img/trans.png)
[英]Hibernate doesn't insert child entities: Hibernate: 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.