如何正确映射 OneToOne 关系?

How to map OneToOne relations properly?

我是 Hibernate 和 JPA 的新手。我进行了研究并阅读了有关 OnetoOne 关系的文档 (https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/OneToOne.html)。 我已尝试相应地映射它,除了文档之外,我还在其他来源中搜索了解决方案,但其中 none 对我没有帮助。每次我收到以下异常:

Exception in thread "main" org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: org.example.entity.SalesReps.regionsId

我很高兴收到有关我的代码的任何其他资源或解决方案。

我有两个实体。帐户和 Sales_reps。我想将帐户实体内 sales_rep_id 字段的 OneToOne 映射到 Sales_reps 的 ID 字段。

帐户实体:

    @Entity
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Table(name ="accounts")
    public class Accounts extends BaseEntity implements Serializable {
    
        @Column(name = "name", unique = true, nullable = false)
        private String name;
        @Column(name = "website", unique = true, nullable = false)
        private String website;
        @Column(name = "latitude", unique = true, nullable = false)
        private Double lat;
        @Column(name = "longitude", unique = true, nullable = false)
        private Double lon;
        @Column(name = "primary_poc", unique = true, nullable = false)
        private String primaryPerson;
    
        @OneToOne(cascade=CascadeType.ALL,fetch = FetchType.EAGER)
        @JoinColumn(name="Sales_rep_id", referencedColumnName = "id")
        private SalesReps SalesReps; 
}

Sales_reps实体:

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "sales_reps")
public class SalesReps extends BaseEntity implements Serializable {

    @Column(name ="name")
    private String name;

    @OneToMany
    @JoinColumn(name = "region_id", referencedColumnName = "id")
    private Regions regionsId;

}

我有 BaseEntity class 作为 Id 参考:

@MappedSuperclass
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity {

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

任何帮助都是宝贵的,感谢您的理解。

Sales_Repsclass 中存在问题。您使用了 @OneToMany 注释,但提供了一个对象作为字段而不是对象集合(这是 @OneToMany 映射所必需的)。您可能想要使用 List 或 Set。另一个问题是在关系的@OneToMany 端你不使用@JoinColumn,它应该在关系的@ManyToOne 端使用。