Spring数据JPA只有一个复合键是自动递增的问题

时间:2017-09-22 06:26:17

标签: java mysql spring 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> {
        }

在我的控制器中,我想在employeeRepository.save(bean)之后使用id;方法,因为我想将该id保存在不同的数据库中。

logger.info(&#34; gender_key是---&gt;&#34; + gender_key);

但我总是得到gender_key的0值。

我尝试的是:

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

但是gender_key的值仍为0(零)。 或者我必须在存储库中编写的任何查询。

如何获取插入MySQL表的gender_key的自动递增值?

请帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

来自https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

  

JPA Id并不总是必须匹配数据库表primary   密钥约束,也不是主键或唯一约束。

由于您的自动增量列保证是唯一的,因此只需使用gender_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

答案 1 :(得分:0)

您在id字段错过了@GeneratedValue。 根据其值,您可以自由选择生成策略,例如序列,id表,自动内部id生成。 最后但并非最不重要的GenerationType.AUTO将选择上述策略之一。 请参阅javax.persistence.GeneratedValuejavax.persistence.GenerationType的Javadoc。