弹簧数据JPA只有一个复合密钥是自动增加问题



我正在使用mySQL数据库。

在我的桌子上我有两个四个主要键,其中一个是自动增加的。

@Embeddable
    public class EmployeeId implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        @Column(name = "id", nullable = false)// 
         This is just Pk  in mysql table
        **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")
     **this is auto incremented and pk in mysql table**
        @Column(name = "gender_key", nullable = false)
        private int 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> {
        }

在我的控制器中,我想要applyeerepository.save(bean)之后的ID;方法是因为我想将该ID保存在不同的dB中。

logger.info(" gengender_key是---->" gender_key);

,但我总是得到性别_key的0值。

我尝试过的东西是:

bean = employeeRepository.save(bean)
int gender_key= bean.getGender_key();
logger.info("gender_keyis --- > "+gender_key);

,但性别_key的值仍然为0(零)。或我必须在存储库中编写的任何查询。

我如何获得插入mySQL表的性别的自动增量值?

请帮助。

预先感谢。

您的JPA @Id不需要匹配数据库PK列。只要它是唯一的,那就是重要的。

来自https://en.wikibooks.org/wiki/java_persistence/indesity_and_sequencing:

JPA ID不一定总是匹配数据库表 钥匙约束,也不需要主要密钥或独特的约束。

确保您的自动插图列是唯一的,然后只需将gengender_key用作@ID,然后将映射ID作为普通列。

@Entity
@Table(name = "employee")
public class employee {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY) 
   private int genderKey;
   @Column
   private int id;
}

说实话,我会发现您的模式令人困惑。

我还建议阅读以下内容:

https://www.javatpoint.com/java-naming-conventions

您在id字段中缺少@generatedValue。根据其值,您可以自由选择生成策略,例如序列,ID表,自动内部ID生成。最后但并非最不重要的一代。请参阅javax.persistence.GeneratedValuejavax.persistence.GenerationType的Javadocs。

最新更新