简体   繁体   English

如何在休眠状态下保留地图

[英]How to Persist a Map in Hibernate

I am stuck at the following problem. 我陷入了以下问题。

The following is my Entity OrderModel. 以下是我的实体OrderModel。 I have another entity named ItemModel, which I want to use in a Map. 我还有一个名为ItemModel的实体,我想在Map中使用它。 I want to book orders. 我想预订订单。

For each Item I select for an order I want to specify the number of such items, and hence the integer in the map. 对于要为订单选择的每个商品,我想指定此类商品的数量,因此要指定地图中的整数。 The key ofcourse must be the Item Object. 课程的关键必须是项目对象。

Here is the OrderModel. 这是OrderModel。

    package com.project.pms.model;

    import java.util.HashMap;
    import java.util.Map;

    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.MapKey;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;

    @Entity
    public class OrderModel
    {
        @Id @GeneratedValue
        private Long orderId;

        private String orderReferenceNumber;

        @OneToOne
        private ClientModel orderedBy;

        @OneToOne
        private ClientModel orderedTo;

        @OneToMany
        @MapKey(name="THE_ITEM")
        private Map<ItemModel,Integer> itemList= new HashMap<ItemModel, Integer>();
        // the integer above depicts the quantity of the Item
        // For each Item I select I need to specify how many of those

        private String orderIssuedDate;

        private String orderToBeCompletedBy;

        private String totalPaymentToBeMade;

        private String orderState;

        public Long getOrderId()
        {
            return orderId;
        }

        public void setOrderId(Long orderId)
        {
            this.orderId = orderId;
        }

        public String getOrderReferenceNumber()
        {
            return orderReferenceNumber;
        }

        public void setOrderReferenceNumber(String orderReferenceNumber)
        {
            this.orderReferenceNumber = orderReferenceNumber;
        }

        public ClientModel getOrderedBy()
        {
            return orderedBy;
        }

        public void setOrderedBy(ClientModel orderedBy)
        {
            this.orderedBy = orderedBy;
        }

        public ClientModel getOrderedTo()
        {
            return orderedTo;
        }

        public void setOrderedTo(ClientModel orderedTo)
        {
            this.orderedTo = orderedTo;
        }

        public Map<ItemModel, Integer> getItemList()
        {
            return itemList;
        }

        public void setItemList(Map<ItemModel, Integer> itemList)
        {
            this.itemList = itemList;
        }

        public String getOrderIssuedDate()
        {
            return orderIssuedDate;
        }

        public void setOrderIssuedDate(String orderIssuedDate)
        {
            this.orderIssuedDate = orderIssuedDate;
        }

        public String getOrderToBeCompletedBy()
        {
            return orderToBeCompletedBy;
        }

        public void setOrderToBeCompletedBy(String orderToBeCompletedBy)
        {
            this.orderToBeCompletedBy = orderToBeCompletedBy;
        }

        public String getTotalPaymentToBeMade()
        {
            return totalPaymentToBeMade;
        }

        public void setTotalPaymentToBeMade(String totalPaymentToBeMade)
        {
            this.totalPaymentToBeMade = totalPaymentToBeMade;
        }

        public String getOrderState()
        {
            return orderState;
        }

        public void setOrderState(String orderState)
        {
            this.orderState = orderState;
        }







    }

However I am getting the following exception. 但是,我得到以下异常。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.hibernate.SessionFactory com.project.pms.service.ClientService.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/springmvc-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.project.pms.model.OrderModel.itemList[java.lang.Integer]
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    javax.servlet.GenericServlet.init(GenericServlet.java:160)
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746)
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:67)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)



root cause 
org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.hibernate.SessionFactory com.project.pms.service.ClientService.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/springmvc-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.project.pms.model.OrderModel.itemList[java.lang.Integer]
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    org.springframework

Is there a way I can persist the numberOfItems Integer with the type of Item. 有没有一种方法可以将numberOfItems Integer保留为Item的类型。 Of course I do not require this field in the ItemModel itself. 当然,我不需要ItemModel本身中的此字段。

Also can someone answer my QueryByExample question as well:) It would be highly appreciated. 也有人可以回答我的QueryByExample问题:)会非常感谢。 Thanks 谢谢

To persist collections in JPA2 you can use @ElementCollection 要在JPA2中持久保存集合,可以使用@ElementCollection

For more refer : http://docs.oracle.com/javaee/6/api/javax/persistence/ElementCollection.html 有关更多信息,请参见: http : //docs.oracle.com/javaee/6/api/javax/persistence/ElementCollection.html

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM