2012-03-16 2 views
0

Я пытаюсь выяснить, как использовать @PersistenceUnit, поскольку я прочитал это гораздо лучшее решение, чем @PersistenceContext. Беда в том .... Я не могу понять, как заставить его работать правильно ...Неисправность работы с EntityManagerFactory

@Controller 
public class Content { 
    @PersistenceUnit(unitName = "CMTPU") 
    public EntityManagerFactory emf; 
    public EntityManager em = emf.createEntityManager(); 

    @RequestMapping(value={"/content/edit*"}, method=RequestMethod.GET) 
    public ModelAndView edit(Model model) { 
     ModelAndView mv = new ModelAndView(); 
     mv.setViewName("content/edit"); 

     //get symbols 
     List<Symbol> symbols = em.createNamedQuery("Symbol.findAll").getResultList(); 
     mv.addObject(symbols); 

     return mv; 
    } 
} 

Мое приложение загружается, прежде чем я добавил раздел //get symbols и материал EntityManager. Теперь я вижу ошибку SEVERE: Исключение при загрузке приложения: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.NullPointerException

Я читал, что мне нужно определить unitName, но тогда я смотрю this documentation, и это не показывает, что это делается.

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="CMTPU" transaction-type="JTA"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <jta-data-source>CMT_DEV</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties/> 
    </persistence-unit> 
</persistence> 

У меня возникли проблемы определения того, что я делаю неправильно.

обновление

Моя модель определяет базу данных и все, что, как показано ниже. Мне даже нужен persistence.xml?

package com.fettergroup.cmt.models; 

import java.io.Serializable; 
import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 


    @Entity 
    @Table(name = "symbol", catalog = "DATABASE1", schema = "dbo") 
    @NamedQueries({ 
     @NamedQuery(name = "Symbol.findAll", query = "SELECT s FROM Symbol s"), 
     @NamedQuery(name = "Symbol.findById", query = "SELECT s FROM Symbol s WHERE s.id = :id"), 
     @NamedQuery(name = "Symbol.findBySymbol", query = "SELECT s FROM Symbol s WHERE s.symbol = :symbol"), 
     @NamedQuery(name = "Symbol.findByHtmlNumber", query = "SELECT s FROM Symbol s WHERE s.htmlNumber = :htmlNumber"), 
     @NamedQuery(name = "Symbol.findByHtmlName", query = "SELECT s FROM Symbol s WHERE s.htmlName = :htmlName"), 
     @NamedQuery(name = "Symbol.findByAsciiDec", query = "SELECT s FROM Symbol s WHERE s.asciiDec = :asciiDec"), 
     @NamedQuery(name = "Symbol.findByAsciiHex", query = "SELECT s FROM Symbol s WHERE s.asciiHex = :asciiHex")}) 
    public class Symbol implements Serializable { 
     private static final long serialVersionUID = 1L; 
     @Id 
     @Basic(optional = false) 
     @NotNull 
     @Column(name = "id") 
     private Short id; 
     @Size(max = 10) 
     @Column(name = "symbol") 
     private String symbol; 
     @Size(max = 10) 
     @Column(name = "html_number") 
     private String htmlNumber; 
     @Size(max = 10) 
     @Column(name = "html_name") 
     private String htmlName; 
     @Size(max = 10) 
     @Column(name = "ascii_dec") 
     private String asciiDec; 
     @Size(max = 10) 
     @Column(name = "ascii_hex") 
     private String asciiHex; 

     public Symbol() { 
     } 

     public Symbol(Short id) { 
      this.id = id; 
     } 

     public Short getId() { 
      return id; 
     } 

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

     public String getSymbol() { 
      return symbol; 
     } 

     public void setSymbol(String symbol) { 
      this.symbol = symbol; 
     } 

     public String getHtmlNumber() { 
      return htmlNumber; 
     } 

     public void setHtmlNumber(String htmlNumber) { 
      this.htmlNumber = htmlNumber; 
     } 

     public String getHtmlName() { 
      return htmlName; 
     } 

     public void setHtmlName(String htmlName) { 
      this.htmlName = htmlName; 
     } 

     public String getAsciiDec() { 
      return asciiDec; 
     } 

     public void setAsciiDec(String asciiDec) { 
      this.asciiDec = asciiDec; 
     } 

     public String getAsciiHex() { 
      return asciiHex; 
     } 

     public void setAsciiHex(String asciiHex) { 
      this.asciiHex = asciiHex; 
     } 

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

     @Override 
     public boolean equals(Object object) { 
      // TODO: Warning - this method won't work in the case the id fields are not set 
      if (!(object instanceof Symbol)) { 
       return false; 
      } 
      Symbol other = (Symbol) object; 
      if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
       return false; 
      } 
      return true; 
     } 

     @Override 
     public String toString() { 
      return "com.project1.models.Symbol[ id=" + id + " ]"; 
     } 

    } 

ответ

1

использование только

@Controller 
public class Content { 

    @PersistenceContext(unitName = "CMTPU") 
    public EntityManager em; 

Менеджер объект должен контролироваться весной.

Это пример, он использует hiberante в качестве поставщика непрерывности, но я думаю, что вы можете его адаптировать.

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 

</bean> 
<bean 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
    id="entityManagerFactory"> 
    <property name="persistenceUnitName" value="myPersistenceUnit" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="false" /> 
     </bean> 
    </property> 
</bean> 

образец блок настойчивость, который работает с этой конфигурацией

<persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="validate" /> 
     <property name="hibernate.connection.charSet" value="UTF-8" /> 
    </properties> 
</persistence-unit> 
+0

ли я определить боб внутри applicationContext.xml? Это мой первый выход на Java, поэтому несите меня, если мне трудно адаптировать это к моим потребностям ... когда я пытаюсь копировать то, что у вас есть, и меняя «myPersistenceUnit» на «CMTPU», он выдает ошибку «Ошибка создания компонента» с именем «entityManagerFactory», определенным в ресурсе ServletContext [/WEB-INF/applicationContext.xml]: Невозможно создать внутренний bean-файл org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter # 17b51d9 'типа [org.springframework.orm.jpa. vendor.HibernateJpaVendorAdapter] при настройке bean-свойства 'jpaVendorAdapter'; ... ' – Webnet

+0

Ingore мой предыдущий комментарий ... Я не включил изменения' persistence-unit', о которых вы говорили. После выполнения этого изменения я вижу, что «Недопустимый контент был найден, начиная с свойств элемента». В этот момент не ожидается никакого дочернего элемента. – Webnet

+0

Где эта проблема, persistence.xml или spring config? Звучит как проблема xml, проверьте xml. (Я скопировал код и немного изменил его, могу ли я удалить часть закрытия xml eleemnt) – Ralph

Смежные вопросы