【问题标题】:Spring Data JPA - saving a new entity with custom id / primary keySpring Data JPA - 使用自定义 id / 主键保存新实体
【发布时间】:2013-02-03 22:14:13
【问题描述】:

简而言之,我的问题是如何使用 Spring data JPA 保存具有预设主键(而不是 null)的实体。

为了解释,考虑一个名为Customer 的简单实体类。请记住,id 没有设置为自动递增,它必须是自定义的唯一值。这只是一个小例子。我需要我的实际表中的 id 是自定义唯一的,比如用户名。

@Entity
@Table(name = "customer")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Basic(optional = false)
    @Column(name = "cust_id", nullable = false)
    private Integer custId;

    @Column(name = "first_name", length = 30)
    private String firstName;

    @Column(name = "last_name", length = 30)
    private String lastName;

    //getter, setters 
}

还有,我有一个CustomerRepository

@Repository
public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}

现在,我想我必须插入一条 id 为 101 的新客户记录。预期的方式是:

Customer customer = new Customer();
customer.setCustId(101);
customer.setFirstName("Some");
customer.setLastName("Name");

repository.save(customer);

但是,repository.save() 碰巧没有插入 id 为 101 的新客户。那么,我该怎么做呢?

【问题讨论】:

  • 它做了什么?什么保存到数据库中?你的测试是什么以确保它不被保存?
  • @user1888440 没有任何内容保存到数据库中。我手动检查了数据库表以确保这一点。
  • 听起来你的交易没有提交。你在使用@Transactional 吗?确保在事务提交后检查数据库或确保调用了刷新。
  • @user1888440 谢谢兄弟!调用flush()后即可使用。
  • De nada,我将评论添加为答案,以便您将其标记为已回答。

标签: java spring spring-data-jpa


【解决方案1】:

如果您处于活动事务中,请务必记住显式调用 flush 或确保事务已提交,然后再独立检查数据库以确保已进行更改。

【讨论】:

  • 还有方便的saveAndFlush()方法。
猜你喜欢
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 2019-09-30
  • 2018-04-20
  • 1970-01-01
  • 2017-12-11
  • 2019-10-01
相关资源
最近更新 更多