Спящий первичный ключ как внешний ключ - PullRequest
0 голосов
/ 25 мая 2018

Я хочу сделать столбец, ссылающийся на другую сущность, идентификатором.У меня есть Currency класс и AuditSystem класс.Currency имеет простой идентификатор строки, а идентификатор AuditSystem должен быть объектом типа Currency.Я играл с @IdClass и заставил мои классы реализовать Serializable, но не могу понять, как заставить это работать, потому что я все еще получаю ошибки.Я считаю, что это тривиальная проблема, но на самом деле ничего не могу придумать.

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "audit_system")
public class AuditSystem implements Serializable {

    @Id
    private Currency currency;
    private Float audit;
    private Timestamp created;
}

.

@Data
@NoArgsConstructor
@Entity
@Table(name = "currencies")
public class Currency implements Serializable {

    @Id
    private String code;
    private String name;
    private String icon;
    private Timestamp created = Timestamp.from(Instant.now());
}

Как правильно сопоставить эти объекты?

1 Ответ

0 голосов
/ 25 мая 2018

Я предполагаю, что вам все еще нужно иметь свое собственное поле @Id в AuditSystem.И создать отношения между этими двумя объектами.Так что-то вроде этого

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "audit_system")
public class AuditSystem implements Serializable {

    @Id
    private String code;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Currency currency;

    private Float audit;
    private Timestamp created;
}


@Data
@NoArgsConstructor
@Entity
@Table(name = "currencies")
public class Currency implements Serializable {

    @Id
    private String code;

    @OneToOne(mappedBy="currency")
    private AuditSystem auditSystem;

    private String name;
    private String icon;
    private Timestamp created = Timestamp.from(Instant.now());
}

@ PrimaryKeyJoinColumn должно помочь в случае, когда первичный ключ также является внешним ключом Hibernate doc @ PrimaryKeyJoinColumn

...