[英]@OneToOne or @ManyToOne on references an unknown entity
Simple scenario:简单场景:
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...和
PreCandidat
在nc.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.