J'essaie de comprendre comment utiliser @PersistenceUnit
car j'ai lu que c'est une bien meilleure solution que @PersistenceContext
. Le problème est .... Je ne peux pas comprendre comment le faire fonctionner correctement ...Problème de fonctionnement avec 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;
}
}
Mon application chargée avant ajouté la section //get symbols
et les choses EntityManager. Maintenant, je vois l'erreur SEVERE: Exception lors du chargement de l'application: java.lang.IllegalStateException: ContainerBase.addChild: début: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.NullPointerException
J'ai lu que j'ai besoin de définir un unitName
, mais alors je regarde this documentation et il ne montre pas cela étant fait.
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>
Je vais avoir du mal à déterminer ce que je fais mal.
mise à jour
Mon modèle définit la base de données et tout cela comme on le voit ci-dessous. Ai-je besoin d'un 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 + " ]";
}
}
-je définir le grain dans les applicationContext.xml? C'est ma première visite à Java, alors s'il vous plaît, si j'ai du mal à l'adapter à mes besoins ... quand j'essaie de copier ce que vous avez et de changer 'myPersistenceUnit' en' CMTPU', il lance l'erreur 'Erreur de création de haricot avec le nom 'entityManagerFactory' défini dans la ressource ServletContext [/WEB-INF/applicationContext.xml]: Impossible de créer le bean interne 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter # 17b51d9' de type [org.springframework.orm.jpa. vendor.HibernateJpaVendorAdapter] lors de la définition de la propriété bean 'jpaVendorAdapter'; ... ' – Webnet
Ingore mon commentaire précédent ... Je n'avais pas inclus les changements' persistence-unit' dont vous avez parlé. Après avoir implémenté ce changement, je vois que le contenu non valide a été trouvé en commençant par l'élément 'properties'. Aucun élément enfant n'est attendu à ce stade. – Webnet
Où est ce problème, persistence.xml ou spring config? Cela ressemble à un problème de xml, vérifiez le xml. (J'ai copié le code et je l'ai modifié un peu, puis-je supprimer une fermeture de xml eleemnt) – Ralph