代码之家  ›  专栏  ›  技术社区  ›  destro1

Hibernate jpa“mappedBy”异常

  •  1
  • destro1  · 技术社区  · 6 年前

    当我想使用persist方法向我的数据库添加新的UserDetails对象时,我的JPA数据库有问题。然后我得到了异常:“键hibernate的重复条目2”该异常与Product类相关。我找到的解决方案是在@OneToMany(产品类列表上方)中添加mappedBy参数,但后来我得到了“mappedBy reference an unknown target entity property” 有什么解决办法吗?

    @Entity
    public class UserDetails {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    ....
    @OneToOne(cascade = CascadeType.ALL)
    private UserOffer userOffer;
    ..... 
    //getters and setters
    

    下一个

    @Entity
    public class UserOffer {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    .....
    @OneToOne(cascade= CascadeType.ALL)
    private DetailsOffer detailsOffer;
    .....
    

    下一个

    @Entity
    public class DetailsOffer {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy="detailsOffer")
    private List<Product> products;
    

    nexr公司 @实体 公共类产品{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    private PetType petType;
    private int petNumber;
    @ElementCollection
    private List<String> goodies;
    private String petDescribtion;
    private BigDecimal price;
    

    错误:

    Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.knr.domain_ver2.Product.detailsOffer in com.knr.domain_ver2.DetailsOffer.products
        at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:719) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:360) ~[spring-orm-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:382) ~[spring-orm-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:371) ~[spring-orm-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:336) ~[spring-orm-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        ... 16 common frames omitted
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Victor Hugo Soares Cardoso    6 年前

    课堂上 Product 您需要声明字段 detailsOffer 并将其映射为 @ManyToOne @JoinColumn 具有引用的列名 DetailsOffer

    例如:

    @ManyToOne
    @JoinColumn(name = 'id_details_offer')
    private DetailsOffer detailsOffer;
    

    我希望这对你有帮助。