Если вы просто добавите PartnerDetails
к JWTData
, то JPA будет знать, что нужно использовать только идентификатор. JPA является объектно-ориентированной средой, поэтому вы должны ссылаться на объекты, если вы не хотите специально поле. JPA обрабатывает детали для вас. Обратите внимание, что в этой конфигурации JWTData
в «владеющем» объекте из-за аннотации mappedBy
, поэтому только установка поля partnerDetails
в экземпляре JWTData
сохранит связь с базой данных. Поле jwtData
в PartnerDetails
предназначено только для результатов запроса и соответствует Bidirectional
вместо Unidirectional
отображения. Кроме того, из-за этого установка CascadeType
обычно имеет смысл только для объекта-владельца, поскольку именно он обрабатывает обновления и удаления базы данных.
При игре с JPA обязательно включите вывод SQL, чтобы вы знали, что на самом деле происходит.
@Entity
@Data
@Table(name = "partner_details")
public class PartnerDetails {
@Id
@Column(name = "partner_id")
private String partnerId;
@OneToOne(mappedBy = "partnerDetails")
private JWTData jwtData;
@Entity
@Data
@Table(name = "jwt_data")
@NoArgsConstructor
public class JWTData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// even though it looks like the entire class it's only saving the id to the database.
@OneToOne
private PartnerDetails partnerDetails;