Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 列表未存储在数据库中-Hibernate Spring_Java_Hibernate_Spring Boot - Fatal编程技术网

Java 列表未存储在数据库中-Hibernate Spring

Java 列表未存储在数据库中-Hibernate Spring,java,hibernate,spring-boot,Java,Hibernate,Spring Boot,我尝试将PersonManager及其列表存储到数据库中 实际上,一切似乎都很顺利,没有错误,PersonManager正确地存储在数据库中。但不是它的清单 但是,一旦我访问数据库并尝试迭代PersonManager列表中保存的人员,返回的列表总是空的 我使用SpringBoot、Hibernate和基于H2文件的DB。日志在这篇文章的末尾,重要的是要看看发生了什么 这里 人 @Entity public class Person { @Id @GeneratedValu

我尝试将PersonManager及其列表存储到数据库中

实际上,一切似乎都很顺利,没有错误,PersonManager正确地存储在数据库中。但不是它的清单

但是,一旦我访问数据库并尝试迭代PersonManager列表中保存的人员,返回的列表总是空的

我使用SpringBoot、Hibernate和基于H2文件的DB。日志在这篇文章的末尾,重要的是要看看发生了什么

这里

   @Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    final String name;
    @ManyToOne
    private PersonManager personManager;

    public PersonManager getPersonManager() {
        return personManager;
    }

    public void setPersonManager(PersonManager personManager) {
        this.personManager = personManager;
    }

    public String getName() {
        return name;
    }

    public Long getId() {

        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (!id.equals(person.id)) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }

    public Person(String name) {
        this.name = name;
    }
}
人事经理

   @Entity
public class PersonManager {

    @OneToMany(mappedBy = "personManager", fetch = FetchType.EAGER)
    private final List<Person> personList = new LinkedList<>();
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        PersonManager that = (PersonManager) o;

        if (!id.equals(that.id)) return false;
        return personList != null ? personList.equals(that.personList) : that.personList == null;
    }

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + (personList != null ? personList.hashCode() : 0);
        return result;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<Person> getPersonList() {
        return personList;
    }

    public void addPerson(Person person) {
        personList.add(person);
    }

    public void removePerson(Person person) {
        personList.remove(person);
    }
}
   @SpringBootApplication
public class HibernateApplication {


    private static final Logger log = LoggerFactory.getLogger(HibernateApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(HibernateApplication.class);
    }


    @Bean
    public CommandLineRunner addObservables(ObserveableRepository repository) {
        return (args) -> {
            useObserver(repository);

            // fetch all customers
            log.info("PersonManager found with findAll():");
            log.info("-------------------------------");
            for (PersonManager personManager : repository.findAll()) {
                log.info("ListContent: " + personManager.getPersonList().size());
            }
            log.info("");

        };
    }

    private void usePersonManager(PersonManagerRepo repository) {
        PersonManager personManager = new PersonManager();
        personManager.addPerson(new Person("Hans"));
        personManager.addPerson(new Person("Peter"));
        personManager.addPerson(new Person("Max"));
        log.info("List.size() : " + personManager.getPersonList().size());
        repository.save(personManager);
    }


    /**
     * Start internal H2 server so we can query the DB from IDE
     *
     * @return H2 Server instance
     * @throws SQLException
     */
     /*
    @Bean(initMethod = "start", destroyMethod = "stop")
    public Server h2Server() throws SQLException {
        return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
    }
    */
}
public interface PersonManagerRepo extends CrudRepository<PersonManager, Long> {

}
人事经理招聘

   @Entity
public class PersonManager {

    @OneToMany(mappedBy = "personManager", fetch = FetchType.EAGER)
    private final List<Person> personList = new LinkedList<>();
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        PersonManager that = (PersonManager) o;

        if (!id.equals(that.id)) return false;
        return personList != null ? personList.equals(that.personList) : that.personList == null;
    }

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + (personList != null ? personList.hashCode() : 0);
        return result;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<Person> getPersonList() {
        return personList;
    }

    public void addPerson(Person person) {
        personList.add(person);
    }

    public void removePerson(Person person) {
        personList.remove(person);
    }
}
   @SpringBootApplication
public class HibernateApplication {


    private static final Logger log = LoggerFactory.getLogger(HibernateApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(HibernateApplication.class);
    }


    @Bean
    public CommandLineRunner addObservables(ObserveableRepository repository) {
        return (args) -> {
            useObserver(repository);

            // fetch all customers
            log.info("PersonManager found with findAll():");
            log.info("-------------------------------");
            for (PersonManager personManager : repository.findAll()) {
                log.info("ListContent: " + personManager.getPersonList().size());
            }
            log.info("");

        };
    }

    private void usePersonManager(PersonManagerRepo repository) {
        PersonManager personManager = new PersonManager();
        personManager.addPerson(new Person("Hans"));
        personManager.addPerson(new Person("Peter"));
        personManager.addPerson(new Person("Max"));
        log.info("List.size() : " + personManager.getPersonList().size());
        repository.save(personManager);
    }


    /**
     * Start internal H2 server so we can query the DB from IDE
     *
     * @return H2 Server instance
     * @throws SQLException
     */
     /*
    @Bean(initMethod = "start", destroyMethod = "stop")
    public Server h2Server() throws SQLException {
        return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
    }
    */
}
public interface PersonManagerRepo extends CrudRepository<PersonManager, Long> {

}
我在下面记录了列表的大小和元素。当第一次运行时,元素存在。重建后,他们就消失了

2017-06-12 17:12:26.160  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : No active profile set, falling back to default profiles: default
2017-06-12 17:12:26.185  INFO 3252 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4516af24: startup date [Mon Jun 12 17:12:26 CEST 2017]; root of context hierarchy
2017-06-12 17:12:26.948  INFO 3252 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b98d9ce8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2017-06-12 17:12:27.156  INFO 3252 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-06-12 17:12:27.162  INFO 3252 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2017-06-12 17:12:27.163  INFO 3252 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.14
2017-06-12 17:12:27.212  INFO 3252 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2017-06-12 17:12:27.212  INFO 3252 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1029 ms
2017-06-12 17:12:27.284  INFO 3252 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2017-06-12 17:12:27.286  INFO 3252 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-06-12 17:12:27.287  INFO 3252 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-06-12 17:12:27.287  INFO 3252 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-06-12 17:12:27.287  INFO 3252 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2017-06-12 17:12:27.506  INFO 3252 --- [           main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2017-06-12 17:12:27.513  INFO 3252 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2017-06-12 17:12:27.546  INFO 3252 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.0.12.Final}
2017-06-12 17:12:27.546  INFO 3252 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2017-06-12 17:12:27.547  INFO 3252 --- [           main] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2017-06-12 17:12:27.567  INFO 3252 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2017-06-12 17:12:27.619  INFO 3252 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2017-06-12 17:12:27.858  INFO 3252 --- [           main] org.hibernate.tuple.PojoInstantiator     : HHH000182: No default (no-argument) constructor for class: com.example.hibernate.Person (class must be instantiated by Interceptor)
2017-06-12 17:12:27.901  INFO 3252 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table person if exists
Hibernate: drop table person_manager if exists
Hibernate: create table person (id bigint generated by default as identity, name varchar(255), person_manager_id bigint, primary key (id))
Hibernate: create table person_manager (id bigint generated by default as identity, primary key (id))
Hibernate: alter table person add constraint FKmyv6vk7htrqtbt7ji7rngwgh2 foreign key (person_manager_id) references person
2017-06-12 17:12:27.912  INFO 3252 --- [           main] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete
2017-06-12 17:12:27.928  INFO 3252 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2017-06-12 17:12:28.173  INFO 3252 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4516af24: startup date [Mon Jun 12 17:12:26 CEST 2017]; root of context hierarchy
2017-06-12 17:12:28.208  INFO 3252 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-06-12 17:12:28.209  INFO 3252 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2017-06-12 17:12:28.223  INFO 3252 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-12 17:12:28.223  INFO 3252 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-12 17:12:28.241  INFO 3252 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-06-12 17:12:28.369  INFO 3252 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-06-12 17:12:28.398  INFO 3252 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-06-12 17:12:28.400  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : List.size() : 3
Hibernate: insert into person_manager (id) values (null)
2017-06-12 17:12:28.434  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : Observables found with findAll():
2017-06-12 17:12:28.434  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : -------------------------------
2017-06-12 17:12:28.446  INFO 3252 --- [           main] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select personmana0_.id as id1_1_ from person_manager personmana0_
Hibernate: select personlist0_.person_manager_id as person_m3_0_0_, personlist0_.id as id1_0_0_, personlist0_.id as id1_0_1_, personlist0_.name as name2_0_1_, personlist0_.person_manager_id as person_m3_0_1_ from person personlist0_ where personlist0_.person_manager_id=?
2017-06-12 17:12:28.493  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : ListContent: 0
2017-06-12 17:12:28.493  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : 
2017-06-12 17:12:28.494  INFO 3252 --- [           main] c.e.hibernate.HibernateApplication       : Started HibernateApplication in 2.47 seconds (JVM running for 2.718)
2017-06-12 17:12:26.160信息3252---[main]c.e.hibernate.hibernate应用程序:未设置活动配置文件,返回默认配置文件:默认
2017-06-12 17:12:26.185信息3252---[main]国家配置嵌入式Web应用程序上下文:刷新org.springframework.boot.context.embedded。AnnotationConfigEmbeddedWebApplicationContext@4516af24:启动日期[2017年6月12日星期一17:12:26 CEST];上下文层次结构的根
2017-06-12 17:12:26.948信息3252---[main]trationlegate$BeanPostProcessorChecker:Bean'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration'类型为[org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b98d9ce8]不符合由所有BeanPostProcessor处理的条件(例如:不符合自动代理的条件)
2017-06-12 17:12:27.156信息3252---[main]s.b.c.e.t.TomcatEmbeddedServletContainer:Tomcat用端口初始化:8080(http)
2017-06-12 17:12:27.162信息3252---[main]o.apache.catalina.core.StandardService:启动服务Tomcat
2017-06-12 17:12:27.163信息3252---[main]org.apache.catalina.core.StandardEngine:启动Servlet引擎:apachetomcat/8.5.14
2017-06-12 17:12:27.212信息3252---[ost-startStop-1]o.a.c.c.c.[Tomcat].[localhost].[/]:初始化Spring嵌入式WebApplicationContext
2017-06-12 17:12:27.212信息3252---[ost-startStop-1]o.s.web.context.ContextLoader:根WebApplicationContext:初始化在1029毫秒内完成
2017-06-12 17:12:27.284信息3252---[ost-startStop-1]o.s.b.w.servlet.ServletRegistrationBean:将servlet:“dispatcherServlet”映射到[/]
2017-06-12 17:12:27.286信息3252---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean:将筛选器:“characterEncodingFilter”映射到:[/*]
2017-06-12 17:12:27.287信息3252---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean:将筛选器:“hiddenHttpMethodFilter”映射到:[/*]
2017-06-12 17:12:27.287信息3252---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean:将筛选器:“httpPutFormContentFilter”映射到:[/*]
2017-06-12 17:12:27.287信息3252---[ost-startStop-1]o.s.b.w.servlet.FilterRegistrationBean:将筛选器:“requestContextFilter”映射到:[/*]
2017-06-12 17:12:27.506信息3252---[main]j.LocalContainerEntityManagerFactoryBean:为持久化单元“默认”构建JPA容器EntityManagerFactory
2017-06-12 17:12:27.513信息3252---[main]o.hibernate.jpa.internal.util.LogHelper:hh000204:处理持久性UnitInfo[
名称:默认值
...]
2017-06-12 17:12:27.546信息3252---[main]org.hibernate.Version:hh000412:hibernate核心{5.0.12.Final}
2017-06-12 17:12:27.546信息3252---[main]org.hibernate.cfg.Environment:hh000206:hibernate.properties未找到
2017-06-12 17:12:27.547信息3252---[main]org.hibernate.cfg.Environment:hh000021:字节码提供程序名称:javassist
2017-06-12 17:12:27.567信息3252---[main]o.hibernate.annotations.common.Version:HCANN000001:hibernate Commons annotations{5.0.1.Final}
2017-06-12 17:12:27.619信息3252---[main]org.hibernate.dialen.dialen:hh000400:使用方言:org.hibernate.dialen.h2方言
2017-06-12 17:12:27.858信息3252---[main]org.hibernate.tuple.PojoInstantiator:hh000182:类没有默认(无参数)构造函数:com.example.hibernate.Person(类必须由拦截器实例化)
2017-06-12 17:12:27.901信息3252---[main]org.hibernate.tool.hbm2ddl.SchemaExport:hh000227:运行hbm2ddl架构导出
Hibernate:删除表person(如果存在)
休眠:如果存在,则删除表person\u manager
Hibernate:创建表person(默认情况下生成的id bigint为identity、name varchar(255)、person\u manager\u id bigint、主键(id))
Hibernate:创建表person_manager(默认情况下生成的id bigint作为标识,主键(id))
Hibernate:alter table person add约束FKmyv6vk7htrqtbt7ji7rngwgh2外键(person\u manager\u id)引用person
2017-06-12 17:12:27.912信息3252---[main]org.hibernate.tool.hbm2ddl.SchemaExport:hh000230:模式导出完成
2017-06-12 17:12:27.928信息3252---[main]j.LocalContainerEntityManagerFactoryBean:初始化了持久化单元“default”的JPA EntityManagerFactory
2017-06-12 17:12:28.173信息3252---[main]s.w.s.m.a.RequestMappingHandlerAdapter:正在寻找@ControllerAdvice:org.springframework.boot.context.embedded。AnnotationConfigEmbeddedWebApplicationContext@4516af24:启动日期[2017年6月12日星期一17:12:26 CEST];上下文层次结构的根
2017-06-12 17:12:28.208信息3252---[main]s.w.s.m.a.RequestMappingHandlerMapping:将“{[/error]}”映射到public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2017-06-12 17:12:28.209
public Person() {
    this.name = null;
}
    private void useObserver(ObserveableRepository repository) {
    PersonManager personManager = new PersonManager();
    personManager.addPerson(new Person("Hans", personManager));
    personManager.addPerson(new Person("Peter", personManager));
    personManager.addPerson(new Person("Max", personManager));
    log.info("List.size() : " + personManager.getPersonList().size());
    repository.save(personManager);
}