Получения сущности по вторичному ключу. Hibernate

122
01 января 2020, 03:10

Есть две связанные таблицы, Runner и Registration.

package ru.worldskills.model.entity;
import javax.persistence.*;
import java.util.Date;
@Entity
@Table(name = "runner")
public class Runner{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "RunnerId")
    private int runnerId;
    @Column(name = "Email")
    private String email;
    @ManyToOne
    @JoinColumn(name =  "Gender", foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT))
    private Gender gender;
    @Column(name = "DateOfBirth")
    private Date dateOfBirth;
    @ManyToOne
    @JoinColumn(name = "CountryCode", foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT))
    private Country country;
}

и

package ru.worldskills.model.entity;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
@Entity
@Table(name = "registration")
public class Registration{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "RegistrationId")
    private int registrationId;
    @OneToOne
    @JoinColumn(name = "RunnerId")
    private Runner runner;
    @Column(name = "RegistrationDateTime")
    private Date registrationDateTime;
    @ManyToOne
    @JoinColumn(name = "RaceKitOptionId", foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT))
    private RaceKitOption raceKitOption;
    @ManyToOne
    @JoinColumn(name = "RegistrationStatusId", foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT))
    private RegistrationStatus registrationStatus;
    @Column(name = "cost")
    private BigDecimal cost;
    @ManyToOne
    @JoinColumn(name = "CharityId", foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT))
    private Charity charity;
    @Column(name = "SponsorshipTarget")
    private BigDecimal sponsorshipTarget;
}

Нужно получить строку из Registration по RunnerID. В нативном SQL это делается легко, а тут не получается. Можно и CriteriaAPI и JPQL использовать.

Answer 1

Например, получим регистрацию с id=5:

// start a transaction
transaction = session.beginTransaction();
// get an registration object
Registration registration = session.get(Registration.class, 5);
// commit transaction
transaction.commit();
System.out.println(registration.getRunner()); // получили также и runner внутри

Или что-то другое имелось в виду?

READ ALSO
Ошибка Can not connect to Ryuk

Ошибка Can not connect to Ryuk

Имеется конфиг для CircleCIНа локальной машине при выполнении CircleCI, все проходит

147
Логика приложения, использование кэша

Логика приложения, использование кэша

Я задался вопросом, как правильно хранить кэш ? Тоесть я хочу услышать предложение как лучше всего его хранитьНапример я думаю так: Качаем...

199