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 data JPA,复杂原生Query

Spring JPA 在嵌入的复合键上使用 @MapsId、@AttributeOverride 时插入重复的选择列

随便说说Spring Data JPA(包含分页,复合查询)

Spring Boot REST JPA JSON 格式

Spring Data Jpa:保存方法仅返回选择,但不执行插入

Spring Data Cassandra:如何使用复合键查询表?