Hibernate 将主键休眠为外键
我想将引用另一个实体的列作为ID。我有Hibernate 将主键休眠为外键,hibernate,spring-boot,jpa,spring-data,spring-data-jpa,Hibernate,Spring Boot,Jpa,Spring Data,Spring Data Jpa,我想将引用另一个实体的列作为ID。我有Currency类和AuditSystem类Currency具有简单的字符串ID,AuditSystem的ID应该是Currency类型的对象。我在玩@IdClass,并使我的类实现了可序列化,但我不知道如何使它工作,因为我仍然会出错。 我相信这是一个微不足道的问题,但真的想不出什么 @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "audit_system") publi
Currency
类和AuditSystem
类Currency
具有简单的字符串ID,AuditSystem
的ID应该是Currency
类型的对象。我在玩@IdClass,并使我的类实现了可序列化,但我不知道如何使它工作,因为我仍然会出错。
我相信这是一个微不足道的问题,但真的想不出什么
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "audit_system")
public class AuditSystem implements Serializable {
@Id
private Currency currency;
private Float audit;
private Timestamp created;
}
如何正确映射这些实体?我的建议是,您仍然需要在AuditSystem中有自己的@Id字段。并在这两个实体之间创建关系。像这样的
@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应该有帮助
审计系统和货币之间的关系是什么?多对一?@Mara一对一我已将@PrimaryKeyJoinColumn(name=“currency”,referencedColumnName=“code”)添加到AuditSystem,现在我从Hibernate获得SerializationException。
@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());
}