복붙노트

[SPRING] Spring 데이터 JPA는 하나의 복합 키만 자동으로 증가시키는 문제입니다.

SPRING

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를 원합니다. 왜냐하면 나는 다른 DB에 그 id를 저장하기를 원하기 때문이다.

logger.info ( "gender_key is --->"+ 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의 자동 증가 값을 얻을 수 있습니까?

도와주세요.

미리 감사드립니다.

해결법

  1. ==============================

    1.JPA @Id는 데이터베이스 PK 열과 일치 할 필요가 없습니다. 그것이 유일 할 때까지는 모든 것이 중요합니다.

    JPA @Id는 데이터베이스 PK 열과 일치 할 필요가 없습니다. 그것이 유일 할 때까지는 모든 것이 중요합니다.

    https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing에서 :

    자동 증분 열이 고유 한 것으로 보장되므로 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

  2. ==============================

    2.id 필드에 @GeneratedValue가 없습니다. 값에 따라 시퀀스, ID 테이블, 자동 내부 ID 생성과 같은 생성 전략을 자유롭게 선택할 수 있습니다. 마지막으로 중요한 것은 GenerationType.AUTO가 언급 된 전략 중 하나를 선택합니다. javax.persistence.GeneratedValue 및 javax.persistence.GenerationType에 대해서는 Javadocs를 참조하십시오.

    id 필드에 @GeneratedValue가 없습니다. 값에 따라 시퀀스, ID 테이블, 자동 내부 ID 생성과 같은 생성 전략을 자유롭게 선택할 수 있습니다. 마지막으로 중요한 것은 GenerationType.AUTO가 언급 된 전략 중 하나를 선택합니다. javax.persistence.GeneratedValue 및 javax.persistence.GenerationType에 대해서는 Javadocs를 참조하십시오.

  3. from https://stackoverflow.com/questions/46358163/spring-data-jpa-only-one-composite-key-is-auto-incremented-issue by cc-by-sa and MIT license