[英]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.