我正在创建一个springboot应用程序,并尝试验证我加载到db的一些信息,并通过单元测试进行检查。我似乎找不到邮件工作
我有一个实体 user
有点像
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name="name", length=50, nullable=false, unique=false)
private String name;
@Column(length=50)
private String email;
@Column(name="password", length=50, nullable=false, unique=false)
private String password;
...
}
``` `userRepository` 这样地。我两个都试过了 `@Query("SELECT * FROM user u WHERE u.email=:email")` 而且没有。也回来了 `List<User>` 或者只是用户。这里的结果总是null或错误。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmail(String email);
}
接口用户服务
public interface UserService {
public List<User> list();
public User loadUserByEmail(String email);
}
用户服务实现
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
public List<User> list() {
return userRepository.findAll();
}
@Override
public User loadUserByEmail(String email) {
User user = userRepository.findByEmail(email);
return user;
}
}
用户服务单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceUnitTest {
@Autowired
private UserService userService;
@Test
public void recordCreation() {
List<User> users = userService.list();
Assert.assertEquals(users.size(), 3);
}
@Test
public void testUserFindByEmail() {
// First user test
User user = userService.loadUserByEmail("mail@mail.com");
Assert.assertEquals(user.getName(), "User1");
}
}
应用程序.属性
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.initialization-mode=always
我做错什么了?结果总是要么是空的,要么是一个错误,我知道一个事实,电子邮件存在,并在数据库中加载,因为我有mysqlworkbench打开,我正在看它。同样,第一个unittest通过并确认表中有3行。
1条答案
按热度按时间z31licg01#
显然,我忽略了一个非常明显的问题,即jpa/hibernate创建列的顺序与我在实体类中定义列的顺序不同,这是出于某种原因。
我在data.sql上的插入顺序与我在实体上定义属性的顺序相同,它们是按另一个顺序创建的。这是我第一次使用它,我不知道这一点
你可以在这里和这里查官方资料