【问题标题】:Custom sql statement using Spring JPA使用 Spring JPA 的自定义 sql 语句
【发布时间】:2021-04-16 13:58:24
【问题描述】:

我正在尝试向名为 user 的表中插入一条记录。我试图排除故障的方法是 insertNewUser,它位于我的班级UserRepositoryCustom。我正在使用JPARepositoryEntityManger 来完成此任务。我仍然无法将用户插入表中。对此的任何帮助将不胜感激。

UserRepositoryImpl

public class UserRepositoryImpl implements UserRepositoryCustom {
    
    @PersistenceContext
    private EntityManager entityManager;
    
    public void insertNewUser(User user) {
        entityManager.createNativeQuery("INSERT INTO user (username,password) VALUES (?,?)")
        .setParameter(1,user.getUserName())
        .setParameter(2,user.getPassword());
    }
}

用户存储库自定义

public interface UserRepositoryCustom {
    public void insertNewUser(User user);
}

用户存储库

@Repository
public interface UserRepository extends JpaRepository<User, Integer>, UserRepositoryCustom {
    User findById(int id);
    User findByUserName(String userName);
        
}

【问题讨论】:

  • 你为什么要编写自己的查询而不只是使用提供的save 方法?界面上的@Repository 也是无用的,如果没有事务,则不会插入任何内容。但正如开头提到的,为什么要编写自己的插入而不是使用 JPA 呢?
  • 我在尝试将用户记录插入数据库时​​遇到问题,该记录看起来像 User(id=null,name="evan",password="test123")
  • 但是为什么不直接使用save呢?这应该可以满足您的所有需求。如果有问题,可能与您在User 实体中的映射有关。使用自定义 SQL 解决这个问题并不是正确的解决方案。
  • 谢谢我在这里提出了一个问题:stackoverflow.com/questions/67097380/…,但没有一个解决方案有效。所以,我尝试了其他方法。

标签: spring jpa


【解决方案1】:

问题是我没有在我的服务类的构造器上使用@Autowired 来注入存储库bean。当我调用 Repository bean 方法时,什么都没有发生。本质上,Repository bean 只是空对象。

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 2019-03-10
    • 2016-09-10
    • 2018-04-13
    • 1970-01-01
    • 2019-02-16
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多