如何正确映射 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 端使用。
我是 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 端使用。