sprinboot jparepository findbyemail不工作

oogrdqng  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(238)

我正在创建一个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行。
z31licg0

z31licg01#

显然,我忽略了一个非常明显的问题,即jpa/hibernate创建列的顺序与我在实体类中定义列的顺序不同,这是出于某种原因。
我在data.sql上的插入顺序与我在实体上定义属性的顺序相同,它们是按另一个顺序创建的。这是我第一次使用它,我不知道这一点
你可以在这里和这里查官方资料

相关问题