две таблицы с одним и тем же автоматически сгенерированным идентификатором - PullRequest
0 голосов
/ 08 июня 2018

У меня есть две сущности с отношениями OneToMany / ManyToOne

Учитель

 @Entity
@JsonIgnoreProperties({"password"})
public class Teacher extends ResourceSupport{

        @Id
        @GeneratedValue
        private Long id;
        @OneToMany(mappedBy = "teacher")
        private List<Course> courses;

       @JsonCreator
        public Teacher(@JsonProperty("Username") String username
            ,@JsonProperty("Password") String password){

                 this.username = username;
                 this.password = password;
        }

         public List<Course> getCourses() {
              return courses;
        }

        public void setCourses(List<Course> courses) {
              this.courses = courses;
        }

        public String getUsername(){
             return username;
        }

        public String getPassword(){
             return password;
        }

        @Setter
        private String username;


        @Setter
        private String password;

       Teacher(){

        }

}

Сущность курса

@Entity
@NoArgsConstructor
@JsonIgnoreProperties({"teacher"})
public class Course {

    @Getter @GeneratedValue(strategy = GenerationType.AUTO) @Id private Long identifier;
    @Getter @Setter @NotNull private String name;
    @Getter @Setter @NotNull private  String description;
    @Getter @Setter @ManyToOne private Teacher teacher;

    @JsonCreator
    public Course(@JsonProperty("Name") String name , @JsonProperty("Description") String description , @JsonProperty("Teacher")Teacher teacher){
        this.description = description;
        this.name = name;
        this.teacher= teacher;
    }


}

ЕСЛИ я создаю2 Учителя Объекты через Почтальон в PostRequest, и я получаю их на стол с его конкретным идентификатором.

, но когда я создаю курс, он начинается с идентификатора 1, он берет последний идентификатор учителя и начинает оттуда.

Это то, что я получаю

     [
    {
        "courses": [
            {
                "identifier": 3,
                "name": "java",
                "description": "java basico"
            }
        ],
        "username": "teuddy",
        "links": [
            {
                "rel": "self",
                "href": "http://localhost:8181/teachers/teuddy"
            }
        ]
    },
    {
        "courses": [],
        "username": "rafael",
        "links": [
            {
                "rel": "self",
                "href": "http://localhost:8181/teachers/rafael"
            }
        ]
    }
]

идентификатор курса - это не первый, а треть, почему?

H2БАЗА ДАННЫХ https://i.stack.imgur.com/haoUy.png

1 Ответ

0 голосов
/ 08 июня 2018

В обеих сущностях вы используете @GeneratedValue (стратегии = GenerationType.AUTO) и @GeneratedValue, по умолчанию равным GenerationType.AUTO.Это означает, что определен генератор идентификаторов, подходящий для используемой БД.В случае базы данных H2 это глобальная последовательность.Таким образом, все сущности разделяют эту последовательность для генерации идентификатора.

Существуют и другие стратегии, но afaik IDENTITY не поддерживается H2 и возвращается к SEQUENCE.

Если для вас важно, чтобы сущностине делитесь их идентификаторами, вы можете попробовать стратегию TABLE, но я бы не рекомендовал этого.(для получения дополнительной информации прочитайте Почему вы никогда не должны использовать таблицу-идентификатор-генератор-генератор-jpa-and-hibernate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...