Как создать @OneToOne Lazy fetch и опционально = true отношения для составных ключевых сущностей с JPA и Hibernate - PullRequest
0 голосов
/ 25 декабря 2018

У нас есть 2 сущности Student и StudentDetails.Как объявить взаимосвязь @OneToOne между ними?

@Table(name = "STUDENTS")
@Data
@IdClass(value = Student.StudentId.class)
public class Student implements Serializable {
    @Id
    @Column(name = "PARTITIONKEY")
    private Long partitionKey;

    @Id
    @Column(name = "STUDENTKEY")
    private Long studentKey;

    @Data
    @NoArgsConstructor
    public static class StudentId implements Serializable {
        private Long partitionKey;
        private Long studentKey;
    }
}


@Table(name = "STUDENTDETAILS")
public class StudentDetails implements Serializable {
    @Id
    @Column(name = "PARTITIONKEY")
    private Long partitionKey;

    @Id
    @Column(name = "STUDENTKEY")
    private Long studentKey;

    @Data
    @NoArgsConstructor
    public static class StudentDetailsId implements Serializable {
        private Long partitionKey;
        private Long studentKey;
    }
}
  1. @ Связь OneToOne должна быть загружена с отложенной загрузкой
  2. вставляемый = ложь и обновляемый = ложь.
  3. Первичные ключисоздаются приложением
  4. Библиотеки, используемая база данных - данные Spring JPA, H2 в базе данных памяти, MySQL, Hibernate 5

1 Ответ

0 голосов
/ 26 декабря 2018
  1. @ Связь OneToOne должна быть Lazily загружена

Только дочерняя сторона может быть LAZY, если вы не используете расширение байт-кода .Для получения более подробной информации, ознакомьтесь с этой статьей для получения более подробной информации для получения более подробной информации.

вставляемый = ложь и обновляемый = ложный.

Этот запрос необходим, только если вы сопоставляете один и тот же столбец для двух свойств сущности.В вашем случае это не нужно.

Первичные ключи генерируются приложением

Если вам требуется, чтобы PK автоматически генерировался из базы данных, вам не нужен составной идентификатор.Вы можете просто использовать @MapsId на дочерней стороне для совместного использования автоматически сгенерированного родительского идентификатора.

Теперь вам лучше использовать @Embeddable для хранения составного идентификатора вместо использования нескольких @Id аннотаций.@EmbeddedId облегчит поиск объекта.В противном случае вам нужно использовать сущность для хранения идентификаторов просто для извлечения фактической сущности из базы данных.

...