Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FetchType=Lazy和optional=false不在JPA中工作_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java FetchType=Lazy和optional=false不在JPA中工作

Java FetchType=Lazy和optional=false不在JPA中工作,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我在我的帐户实体中使用多对一映射 @ManyToOne(fetch = FetchType.LAZY,optional = false) @JoinColumn(name = "CONTACT_ID", referencedColumnName = "CONTACT_ID", nullable = false) private Contact Contact; 在我的DAO中,我正在检索数据: entitymanager.createQuery("SELECT v FROM A

我在我的帐户实体中使用多对一映射

@ManyToOne(fetch = FetchType.LAZY,optional = false)
    @JoinColumn(name = "CONTACT_ID", referencedColumnName = "CONTACT_ID", nullable = false)
    private Contact Contact;
在我的DAO中,我正在检索数据:

entitymanager.createQuery("SELECT v FROM Account v").getResultList();
尽管我使用的是
optional=fasle和fetchType=Lazy
。我看到它正在运行所有查询并检索引用的表数据

我用的是弹簧靴。下面是我的Entitymanager配置

@Configuration
@EnableTransactionManagement
public class DatabaseConfig {


  @Autowired
  private Environment env;

  @Autowired
  private DataSource dataSource;

  @Autowired
  private LocalContainerEntityManagerFactoryBean entityManagerFactory;  


  @Bean
  public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    /*dataSource.setDriverClassName(env.getProperty("db.driver"));*/
    dataSource.setUrl(env.getProperty("db.url"));
    dataSource.setUsername(env.getProperty("db.username"));
    dataSource.setPassword(env.getProperty("db.password"));
    return dataSource;
  }


  @Bean
  public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManagerFactory =
        new LocalContainerEntityManagerFactoryBean();

    entityManagerFactory.setDataSource(dataSource);
    entityManagerFactory.setPackagesToScan(env.getProperty("entitymanager.packagesToScan"));
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
    Properties additionalProperties = new Properties();
   // additionalProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
    additionalProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
   // additionalProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
    additionalProperties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
    entityManagerFactory.setJpaProperties(additionalProperties);
    return entityManagerFactory;
  }

  @Bean
  public JpaTransactionManager transactionManager() {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory.getObject());
    return transactionManager;
  }

  @Bean
  public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
  }
在application.properties中

hibernate.hbm2ddl.auto: update
hibernate.dialect: org.hibernate.dialect.Oracle12cDialect
hibernate.show_sql: true
试试这个:

在给定两个实体之间关系的地方使用@JsonIgnore

@JsonIgnore:as-Spring数据REST将忽略 用@JsonIgnore注释标记

试试这个:

在给定两个实体之间关系的地方使用@JsonIgnore

@JsonIgnore:as-Spring数据REST将忽略 用@JsonIgnore注释标记


您是如何配置persistence.xml的?我正在使用spring boot,因此在java配置类中进行了配置。我已使用详细信息更新了我的问题您是如何配置persistence.xml的?我正在使用spring boot,因此在java配置类中进行了配置。我已使用详细信息我想获取联系人id,但不想获取整个联系人实体。@JsonManaged或类似内容我想获取联系人id,但不想获取整个联系人实体。@JsonManaged或类似内容