Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 将主键休眠为外键_Hibernate_Spring Boot_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

Hibernate 将主键休眠为外键

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

我想将引用另一个实体的列作为ID。我有
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());
}