gpt4 book ai didi

java - @OneToOne 或 @ManyToOne 引用未知实体

转载 作者:行者123 更新时间:2023-11-30 05:48:23 24 4
gpt4 key购买 nike

简单场景:

  • AdmisRejet 可以链接到 Admis 或 PreCandidat。
  • Admis 和 PreCandidat 可以有多个 AdmisRejet。

当我只有 Admis 和 AdmisRejet 时,一切都正常。

但是当我添加 PreCandidat (与 Admis 相同的方式)时,我收到了 hibernate 错误。

不知道为什么...

模型(它们都有 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;

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();
}
}

错误:

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

最佳答案

嗯,这是因为您告诉 factoryBean 您的实体位于 factoryBean.setPackagesToScan(ParcoursupDAOConfig.class.getPackage().getName()); 包中,这是nc.unc.importparcoursup.dao.admisDAOPreCandidat 位于 nc.unc.importparcoursup.dao.pgiCocktailDAO.entity 包中...

尝试 factoryBean.setPackagesToScan("nc.unc.importparcoursup.dao") 或将您的类配置移至更高级别。

关于java - @OneToOne 或 @ManyToOne 引用未知实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com