gpt4 book ai didi

java - 一对一关系,只保留外键

转载 作者:行者123 更新时间:2023-12-02 10:36:57 24 4
gpt4 key购买 nike

我正在尝试在两个实体( PartnerDetailsJWTData 之间建立 OneToOne 关系。但是,我只想将 PartnerDetails 实体的主键存储在 JWTData 中,而不是整个对象,例如这个。

@Entity
@Data
@Table(name = "partner_details")
public class PartnerDetails {

@Id
@Column(name = "partner_id")
private String partnerId;

@OneToOne(cascade = CascadeType.ALL, mappedBy = "partnerId")
private JWTData jwtData;

}

@Entity
@Data
@Table(name = "jwt_data")
@NoArgsConstructor
public class JWTData {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@OneToOne(targetEntity = PartnerDetails.class)
@JoinColumn(name = "partner_id", foreignKey = @ForeignKey(name = "fk_jwt_partnerdetails_partnerid"))
private String partnerId;

@NotBlank
private String secret;
}

但是在获取JWTData之后使用存储库,Hibernate 无法将字符串转换为 PartnerDetails 。可以使用其他方式完成此操作吗?

最佳答案

如果您只是将 PartnerDetails 添加到 JWTData,那么 JPA 将知道仅使用 id。 JPA 是一个面向对象的框架,因此您应该引用对象,除非您特别需要一个字段。 JPA 会为您处理细节。请注意,在此配置中,“拥有”实体中的 JWTData 由于有 mappedBy 注释,因此仅在 中设置 partnerDetails 字段JWTData 实例将保留与数据库的关系。 PartnerDetails 中的 jwtData 字段仅用于查询结果,并用于实现双向而不是单向映射。此外,因此,拥有 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;

关于java - 一对一关系,只保留外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com