【发布时间】:2021-06-17 00:13:04
【问题描述】:
我是 JAVA 和 Spring boot 的新手。 我创建了一个 spring boot 项目,我用这段代码创建了一个实体类:
package com.example.TEST_WEB;
import javax.persistence.*;
@Entity
@Table(name="users")
public class User {
@Id
//Strategy = GenerationType. IDENTITY : La génération de la clé primaire se fera à partir d’une Identité propre au SGBD.
// Il utilise un type de colonne spéciale à la base de données.
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true, length = 45)
private String email;
@Column(nullable = false, length = 64)
private String password;
@Column(name = "first_name", nullable = false, length = 20)
private String firstName;
@Column(name = "last_name", nullable = false, length = 20)
private String lastName;
// getters and setters are not shown
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
然后我用这段代码创建了一个界面:
import com.example.TEST_WEB.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
为了测试我的代码,我创建了一个此类:
package com.example.TEST_WEB;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.annotation.Rollback;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
@DataJdbcTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
//une transaction gérée par un test doit être annulée une fois la méthode de test terminée
@Rollback(false)
public class UserRepositoryTests {
@Autowired
private UserRepository repo;
@Autowired
private TestEntityManager entityManager;
// test methods go below
@Test
public void testCreatUser(){
User user = new User();
user.setEmail("ravikumar@gmail.com");
user.setPassword("ravi2020");
user.setFirstName("Ravi");
user.setLastName("Kumar");
User savedUser = repo.save(user);
User existUser = entityManager.find(User.class, savedUser.getId());
// assert c'est pour la vérification
assertThat(user.getEmail()).isEqualTo(existUser.getEmail());
}
}
--> 但这给了我 2 个错误:
- 未定义类型 UserRepositoryJava(67108964) 的方法 save(User) 和
- 未为 UserJava(67108964) 类型定义方法 getId()
【问题讨论】:
-
@luk2302 JpaRepository 肯定有保存方法!这是从 CrudRepository 继承的
-
带有@SpringBootApplication 的类在哪个包中?
-
你必须使用 DataJpaTest 而不是 DataJdbcTest
-
@SimonMartinelli 我用 DataJpaTest 纠正了它,但它仍然给我同样的错误
-
你能把代码贴在你有@SpringBootApplication 的地方并显示 pom.xml 或者把项目上传到 GitHub 我可以看看
标签: java spring-boot maven jpa