【发布时间】:2021-04-25 08:03:19
【问题描述】:
这里是春季新手,
我想测试存储库的findById() 方法,但即使它已保存(并存在)在数据库中,它也找不到该条目:
@DataJpaTest
class CustomerRepoIntegration {
@Autowired
CustomerRepo customerRepo;
@Test
@Transactional
void findById() {
UUID uuid = UUID.randomUUID();
Customer customer = new Customer(uuid);
customerRepo.save(customer);
List<Customer> allCustomers = customerRepo.findAll();
assertEquals(1, allCustomers.size());
Optional<Customer> foundCustomer = customerRepo.findById(uuid);
assertTrue(foundCustomer.isPresent());
}
}
虽然第一个断言成功,但第二个断言失败:
Error: Failures:
Error: CustomerRepoIntegration.findById:32 expected: <true> but was: <false>
其余代码:
// CustomerRepo.java
public interface CustomerRepo extends JpaRepository<Customer, UUID> {}
// Customer.java
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Customer implements Serializable {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
private UUID id;
}
我也在这里做了一个复制回购:https://github.com/ofhouse/stackoverflow-65818312
【问题讨论】:
-
id由数据库生成。因此,您分配的 id 正在丢失。而是使用
customer.getId()再次找到它。将@Data与@Entity一起使用也是一个坏主意。 (见deinum.biz/2019-02-13-Lombok-Data-Ojects-Arent-Entities)。 -
确实,自动生成的 id 是这里的问题。感谢您在一起使用
@Data和@Entity时提供的提示。很好的阅读,不知道这个!
标签: java spring spring-boot spring-data-jpa