简体   繁体   English

@OneToOne 或 @ManyToOne 引用未知实体

[英]@OneToOne or @ManyToOne on references an unknown entity

Simple scenario:简单场景:

  • an AdmisRejet can be linked to a Admis or a PreCandidat. AdmisRejet 可以链接到 Admis 或 PreCandidat。
  • Admis and PreCandidat can have many AdmisRejet. Admis 和 PreCandidat 可以有很多 AdmisRejet。

All was working when I only had Admis and AdmisRejet.当我只有 Admis 和 AdmisRejet 时,一切正常。

But then I add PreCandidat (the same way as Admis), I get an hibernate error.但是后来我添加了 PreCandidat(与 Admis 的方式相同),我收到了休眠错误。

Can't find out why...不知道为什么...

Model (they all have getters and setters and ids):模型(它们都有 getter、setter 和 id):

// package nc.unc.importparcoursup.dao.admisDAO
@Entity
public class AdmisRejet {
    @ManyToOne
    @JoinColumn(name = "ADMIS_ID")
    private Admis admis;

    @ManyToOne
    @JoinColumn(name = "CAND_KEY")
    private PreCandidat preCandidatRejet;

// package nc.unc.importparcoursup.dao.admisDAO
@Entity
public class Admis {
    @OneToMany(mappedBy = "admis", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<AdmisRejet> admisRejet;

// package nc.unc.importparcoursup.dao.pgiCocktailDAO.entity
@Entity
public class PreCandidat {
    @OneToMany(mappedBy = "preCandidatRejet", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<AdmisRejet> admisRejet;

The dao configuration: dao配置:

package nc.unc.importparcoursup.dao.admisDAO;


@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "parcoursupEntityManagerFactory", transactionManagerRef = "parcoursupTransactionManager")
public class ParcoursupDAOConfig {

    @Value("${datasource.parcoursup-admis.hibernate-hbm2ddl-auto}")
    private String ddlMode;

    @Value("${datasource.parcoursup-admis.jdbc.driverClassName:#{null}}")
    private String driver;


    @Bean
    public PlatformTransactionManager parcoursupTransactionManager() {
        return new JpaTransactionManager(Objects.requireNonNull(parcoursupEntityManagerFactory().getObject()));
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean parcoursupEntityManagerFactory() {
        HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();

        HashMap<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto", ddlMode);
        properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL94Dialect");

        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

        factoryBean.setDataSource(parcoursupDataSource());
        factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
        factoryBean.setPackagesToScan(ParcoursupDAOConfig.class.getPackage().getName());
        factoryBean.setJpaPropertyMap(properties);

        return factoryBean;
    }

    @Bean
    @ConfigurationProperties(prefix = "datasource.parcoursup-admis")
    public DataSource parcoursupDataSource() {
        if (driver != null) {
            return DataSourceBuilder.create()
                    .driverClassName(driver)
                    .build();
        }
        return DataSourceBuilder.create()
                .build();
    }
}

Error:错误:

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on nc.unc.importparcoursup.dao.admisDAO.AdmisRejet.preCandidatRejet references an unknown entity: nc.unc.importparcoursup.dao.pgiCocktailDAO.entity.PreCandidat引起:org.hibernate.AnnotationException:nc.unc.importparcoursup.dao.admisDAO.AdmisRejet.preCandidatRejet 上的@OneToOne 或@ManyToOne 引用了一个未知实体:nc.unc.importparcoursup.dao.pgiCocktailDAO.entity.PreCandidat

Well, it's because you tell the factoryBean that your entities are in the factoryBean.setPackagesToScan(ParcoursupDAOConfig.class.getPackage().getName());嗯,这是因为你告诉factoryBean你的实体在factoryBean.setPackagesToScan(ParcoursupDAOConfig.class.getPackage().getName()); package, which is nc.unc.importparcoursup.dao.admisDAO .包,即nc.unc.importparcoursup.dao.admisDAO and PreCandidat is in the nc.unc.importparcoursup.dao.pgiCocktailDAO.entity package...PreCandidatnc.unc.importparcoursup.dao.pgiCocktailDAO.entity包中......

Try factoryBean.setPackagesToScan("nc.unc.importparcoursup.dao") or move your class config to a higher level.尝试factoryBean.setPackagesToScan("nc.unc.importparcoursup.dao")或将您的类配置移动到更高级别。

我认为您可能忘记将注释 @Table(name = "table_name") 添加到实体中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 JPA OneToMany ManyToOne @OneToOne或@ManyToOne在引用未知实体时: - JPA OneToMany ManyToOne @OneToOne or @ManyToOne on references an unknown entity: * 未知实体上的 @OneToOne 或 @ManyToOne - @OneToOne or @ManyToOne on * an unknown entity org.hibernate.AnnotationException: @OneToOne 或 @ManyToOne<entity> 引用一个未知实体 - org.hibernate.AnnotationException: @OneToOne or @ManyToOne on <entity> references an unknown entity Spring 引导错误:@OneToOne 或 @ManyToOne 引用未知实体 - Spring Boot Error: @OneToOne or @ManyToOne references an unknown entity xxx 上的 @OneToOne 或 @ManyToOne 引用了一个未知实体:java.util.Set - @OneToOne or @ManyToOne on xxx references an unknown entity: java.util.Set &#39;univ_orientation.dz.Entity.cursusGlobale.Student_idStudent&#39;上的@OneToOne或@ManyToOne引用了一个未知实体:int - @OneToOne or @ManyToOne on 'univ_orientation.dz.Entity.cursusGlobale.Student_idStudent' references an unknown entity: int 由以下原因引起:org.hibernate.AnnotationException:XX上的@OneToOne或@ManyToOne引用了未知实体:YY - Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on XX references an unknown entity: YY com.hibernate.domain.Bee.honey上的@OneToOne或@ManyToOne引用未知实体 - @OneToOne or @ManyToOne on com.hibernate.domain.Bee.honey references an unknown entity org.hibernate.AnnotationException:entities.Ques#tion.examId 上的 @OneToOne 或 @ManyToOne 引用了一个未知实体:long - org.hibernate.AnnotationException: @OneToOne or @ManyToOne on entities.Ques#tion.examId references an unknown entity: long 不断获取 org.hibernate.AnnotationException: @OneToOne 或 @ManyToOne 引用未知实体:错误 - Constantly getting org.hibernate.AnnotationException: @OneToOne or @ManyToOne references an unknown entity: error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM