Ich habe mal testweise ein kleines Maven EclipseLink für MySQL Beispiel mit Netbeans geschrieben.
pom.xml
[XML]
persistence.xml
[XML]
Die Verbindungsdaten stimmen. Die Datenbank läuft und folgende Tabelle befindet sich in der Datenbank „eclipselinkdb“
user
[SQL]
CREATE TABLE IF NOT EXISTS user
(
id
int(11) NOT NULL,
firstname
varchar(255) NOT NULL,
lastname
varchar(255) NOT NULL,
email
varchar(255) NOT NULL,
password
varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
[/SQL]
Die dazugehörige Entity sieht wie folgt aus
package eclipselinkdemo.eclipselinkdemo.entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "user")
@NamedQueries({
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "firstname")
private String firstname;
@Basic(optional = false)
@Column(name = "lastname")
private String lastname;
@Basic(optional = false)
@Column(name = "email")
private String email;
@Basic(optional = false)
@Column(name = "password")
private String password;
public User() {
}
public User(Integer id) {
this.id = id;
}
public User(Integer id, String firstname, String lastname, String email, String password) {
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
this.email = email;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@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 User)) {
return false;
}
User other = (User) 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 "eclipselinkdemo.eclipselinkdemo.entity.User[ id=" + id + " ]";
}
}
Die DAO sieht wie folgt aus
package eclipselinkdemo.eclipselinkdemo.dao;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import eclipselinkdemo.eclipselinkdemo.entity.User;
public class UserDAO {
@PersistenceContext
protected EntityManager em;
public User create(final User user) {
this.em.persist(user);
return user;
}
}
Die Mainklasse sieht wie folgt aus
package eclipselinkdemo.eclipselinkdemo;
import eclipselinkdemo.eclipselinkdemo.dao.UserDAO;
import eclipselinkdemo.eclipselinkdemo.entity.User;
public class EclipseLink {
public static void main(String[] args) {
UserDAO dao = new UserDAO();
User user = new User();
user.setFirstname("Roy");
user.setLastname("Sinner");
user.setEmail("test@test.com");
user.setPassword("mypasswod");
dao.create(user);
}
}
Beim Ausführen erhalte ich folgende Fehlermeldung
cd D:\projekte\java
etbeans\EclipseLinkDemo; „JAVA_HOME=C:\Program Files\Java\jdk1.8.0_31“ cmd /c „""D:\Programme\Netbeans\8.0.2\java\maven\bin\mvn.bat" -Dexec.args="-classpath %classpath eclipselinkdemo.eclipselinkdemo.EclipseLink" -Dexec.executable="C:\Program Files\Java\jdk1.8.0_31\bin\java.exe" -Dmaven.ext.class.path=D:\Programme\Netbeans\8.0.2\java\maven-nblib
etbeans-eventspy.jar -Dfile.encoding=UTF-8 process-classes org.codehaus.mojo:exec-maven-plugin:1.2.1:exec"“
Scanning for projects…
Building EclipseLinkDemo 1.0-SNAPSHOT
— maven-resources-plugin:2.5:resources (default-resources) @ EclipseLinkDemo —
[debug] execute contextualize
Using ‚UTF-8‘ encoding to copy filtered resources.
Copying 1 resource— maven-compiler-plugin:2.3.2:compile (default-compile) @ EclipseLinkDemo —
Compiling 3 source files to D:\projekte\java
etbeans\EclipseLinkDemo arget\classes— exec-maven-plugin:1.2.1:exec (default-cli) @ EclipseLinkDemo —
Exception in thread „main“ java.lang.NullPointerException
at eclipselinkdemo.eclipselinkdemo.dao.UserDAO.create(UserDAO.java:21)
at eclipselinkdemo.eclipselinkdemo.EclipseLink.main(EclipseLink.java:25)BUILD FAILURE
Total time: 8.702s
Finished at: Sun May 10 02:53:51 CEST 2015
Final Memory: 17M/113MFailed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (default-cli) on project EclipseLinkDemo: Command execution failed. Process exited with an error: 1 (Exit value: 1) → [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.For more information about the errors and possible solutions, please read the following articles:
[Help 1] MojoExecutionException - Apache Maven - Apache Software Foundation
Der Fehler wird anscheinend in der Zeile
this.em.persist(user);
der create - Funktion der UserDAO - Klasse ausgeführt. Irgendetwas scheine ich hier übersehen zu haben. Korregiert mich wenn ich falsch liege. Durch @PersistenceContext in der Klasse wird die protected EntityManager em; doch instanziert, oder? Was müsste ich ggf. anders machen?
Danke für eure Hilfe im voraus.