【问题标题】:Compilation: Error creating bean with name 'entityManagerFactory'编译:创建名为“entityManagerFactory”的bean时出错
【发布时间】:2019-07-08 21:31:09
【问题描述】:

编译时出现此错误。在测试中我没有问题。

我有依赖javax.xml.bindjaxb-api

错误:

引起:org.springframework.beans.factory.BeanCreationException: 创建类中定义的名称为“entityManagerFactory”的bean时出错 路径资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException: mappedBy 引用未知 目标实体属性: com.endoorment.models.entity.AccessoryLang.accessory 在 com.endoorment.models.entity.Accessory.accessorylang

实体:

@Entity 
@Table(name = "accessories")
public class Accessory implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private Integer id;

@OneToMany(mappedBy = "accessory", cascade = CascadeType.ALL)
private Set<AccessoryLang> accessorylang = new HashSet<AccessoryLang>();

@Entity 
@Table(name = "accessories_langs")
public class AccessoryLang implements Serializable {

private static final long serialVersionUID = 1L;

@EmbeddedId
private AccessoryLangId accessorylangid;

@ManyToOne(fetch = FetchType.LAZY)
@MapsId("accessoryId")
@JoinColumn(name = "accessories_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Accessory accessory;

@ManyToOne(fetch = FetchType.LAZY)
@MapsId("langId")
@JoinColumn(name = "langs_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Lang lang;

@Column(nullable = false, length = 45)
@NotEmpty   
private String name;

【问题讨论】:

  • 我怀疑这是在编译期间。而不是集成测试或启动您的应用程序。

标签: java maven spring-boot


【解决方案1】:

问题是您有一个多对多关系,在您的情况下映射为多对一和一对多。

Accessory 和 Lang 之间存在多对多关系。 JPA 让您可以更好地直接映射它。

请查看本文或搜索“JPA 多对多映射” https://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2020-07-12
    • 2018-02-18
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多