Spring data JPA只有一个复合键自动递增
Posted
技术标签:
【中文标题】Spring data JPA只有一个复合键自动递增【英文标题】:Spring data JPA only one composite key auto incremented 【发布时间】:2018-02-25 12:16:00 【问题描述】:我正在使用 mysql 数据库。
我的表是一个员工,其中有两个主键,其中一个是自动递增的。
我的代码是:
@Embeddable
public class EmployeeId implements Serializable
/**
*
*/
private static final long serialVersionUID = 1L;
@Column(name = "id", nullable = false)// this i want to increment
private int id;
// I have tried and @GeneratedValue(strategy = GenerationType.IDENTITY),
//@GeneratedValue(strategy = GenerationType.IDENTITY)
//and @GeneratedValue(strategy = GenerationType.TABLE)
//@GeneratedValue(strategy = GenerationType.AUTO, generator = "id") @SequenceGenerator(name = "id", sequenceName = "id")
@Column(name = "gender_key", nullable = false)
private id gender_key;
@Entity
@Table(name = "employee")
public class employee
@EmbeddedId
private EmployeeId employeeId;
private String emp_name;
private String mobile_no;
employee()
public interface employeeRepository extends
JpaRepository<employee, EmployeeId>
在我的控制器中,我想要在 employeeRepository.save(bean); 之后的 id方法,因为我想将该 id 保存在不同的表中。
logger.info("id 是---> "+id);
但我总是得到 0 的 id 值。
如何获取插入到 MySQL 表中的 id 的递增值?
请帮忙。
提前致谢。
【问题讨论】:
【参考方案1】:您是要从原始对象还是从save
方法返回的对象中获取值?假设您有以下代码:
employeeRepository.save(bean)
int id = bean.getId();
logger.info("id is --- > "+id);
这确实会返回零,因为您的对象没有此信息。如果您想获取在数据库上生成的值,您必须执行以下操作:
bean = employeeRepository.save(bean)
int id = bean.getId();
logger.info("id is --- > "+id);
【讨论】:
我已经尝试过你的解决方案,但我仍然得到 id 的值为 0。 在表中,id 是 PK 并且是自动递增的,当时我无法获取 id 值。以及其他复合键,如非自动递增的用户名,成员键我能够获得使用此 bean 的此复合键的值 = employeeRepository.save(bean) int username= bean.getUsername(); logger.info("用户名是---> "+用户名);但无法为 ID 获得价值以上是关于Spring data JPA只有一个复合键自动递增的主要内容,如果未能解决你的问题,请参考以下文章
Spring JPA 在嵌入的复合键上使用 @MapsId、@AttributeOverride 时插入重复的选择列
随便说说Spring Data JPA(包含分页,复合查询)