Java 使用EntityManagerFactory时出现问题
我正在试图弄清楚如何使用Java 使用EntityManagerFactory时出现问题,java,spring,jpa,Java,Spring,Jpa,我正在试图弄清楚如何使用@PersistenceUnit,因为我读到它比@PersistenceContext好得多。问题是。。。。我不知道如何让它正常工作 @Controller public class Content { @PersistenceUnit(unitName = "CMTPU") public EntityManagerFactory emf; public EntityManager em = emf.createEntityManager();
@PersistenceUnit
,因为我读到它比@PersistenceContext
好得多。问题是。。。。我不知道如何让它正常工作
@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;
}
}
我很难确定自己做错了什么
更新
我的模型定义了数据库和所有这些,如下所示。我甚至需要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 + " ]";
}
}
仅使用
@Controller
public class Content {
@PersistenceContext(unitName = "CMTPU")
public EntityManager em;
实体管理器应该由spring控制
这是一个例子,它使用Hibernate作为持久性提供者,但我认为您可以调整它
<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>
org.hibernate.ejb.HibernatePersistence
我是否在applicationContext.xml中定义bean?这是我第一次尝试Java,如果我在适应我的需要方面遇到困难,请耐心等待。。。。当我尝试复制您拥有的内容并将myPersistenceUnit
更改为CMTPU
时,它会抛出错误创建名为“entityManagerFactory”的bean,该bean在ServletContext资源[/WEB-INF/applicationContext.xml]中定义:在设置bean属性“jpavendorapter”时,无法创建[org.springframework.orm.jpa.vendor.hibernatejbavendorapter]类型为[org.springframework.orm.jpa.vendor.hibernatejbavendorapter]的内部bean“org.springframework.orm.jpa.vendor.hibernatejbavendorapter”代码>查看我以前的评论。。。我没有包括您提到的持久化单元
更改。在实现该更改后,我发现以元素“properties”开头的内容无效。此时不需要任何子元素
这个问题在哪里,persistence.xml还是spring config?听起来像是xml问题,请检查xml。(我复制了代码并对其进行了一些修改,我是否可以删除一些结束xml元素)或者您的persistence.xml中是否有2个properties
元素?
<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>