2012-07-31 153 views
2

我想做的事情得到的SQL Server數據庫中的數據,所以我使用JDBC驅動程序和的EclipseLink ORM framework.I有一些problem.This是我的榜樣,JPA/EclipseLink的獲取數據錯誤

public static void main(String[] args) 
{ 
     EntityManager entityManager = 
       Persistence.createEntityManagerFactory("HRPSPU").createEntityManager(); 

     List<Personnel> personnelList = entityManager.createQuery("Select p FROM Personnel p",Personnel.class).getResultList(); 

     for (Personnel personnel : personnelList) 
     { 
       System.out.println(personnel.getName()); 
     } 
    } 

和錯誤,

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/E:/tutorial/glassfish3/glassfish/modules/bean-validator.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/E:/tutorial/glassfish3/glassfish/modules/weld-osgi-bundle.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
Tem 31, 2012 11:44:51 PM org.hibernate.validator.util.Version <clinit> 
INFO: Hibernate Validator 4.2.0.Final 
[EL Info]: 2012-07-31 23:44:51.929--ServerSession(451764492)--EclipseLink, version: Eclipse Persistence Services - 2.4.0.v20120608-r11652 
[EL Info]: connection: 2012-07-31 23:44:52.951--ServerSession(451764492)--file:/E:/tutorial/workspace/HRPS/build/classes/_HRPSPU login successful 
[EL Warning]: 2012-07-31 23:44:53.927--UnitOfWork(1400947054)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException 
**Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'Personnel'.** 
Error Code: 208 
Call: SELECT IdentificationNumber, Age, Name, Surname FROM Personnel 
Query: ReadAllQuery(referenceClass=Personnel sql="SELECT IdentificationNumber, Age, Name, Surname FROM Personnel") 
Exception in thread "main" Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'Personnel'. 
Error Code: 208 
Call: SELECT IdentificationNumber, Age, Name, Surname FROM Personnel 
Query: ReadAllQuery(referenceClass=Personnel sql="SELECT IdentificationNumber, Age, Name, Surname FROM Personnel") 
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:646) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:537) 
    at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1800) 
    at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:566) 
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207) 
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193) 
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264) 
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:648) 
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2681) 
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2634) 
    at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:420) 
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1149) 
    at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:852) 
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1108) 
    at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:392) 
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1196) 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2875) 
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1602) 
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1584) 
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1549) 
    at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:231) 
    at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:411) 
    at entity.Main.main(Main.java:18) 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'Personnel'. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:938) 
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:609) 
    ... 22 more 

,這是我persistance.xml,我連integratedsecurity = true,所以我沒有用戶名和密碼...

<?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="HRPSPU" transaction-type="RESOURCE_LOCAL"> 
      <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
      <class>entity.Personnel</class> 
     <properties> 
      <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost:1433;databaseName=Arge;integratedSecurity=true;"/> 
      <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> 
      <property name="javax.persistence.jdbc.password" value=""/> 
      <property name="javax.persistence.jdbc.user" value=""/> 
     </properties> 
     </persistence-unit> 
    </persistence> 

我用於Eclipse Juno IDE和Glassfish應用程序服務器。

回答

0

我有一個數據庫和schema.My表是由這個schema.I連接到本地主機。

封裝實體;

import java.io.Serializable; 
import javax.persistence.*; 


/** 
* The persistent class for the Personnel database table. 
* 
*/ 
@Entity 
@Table(name="Personnel") 
public class Personnel implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Column(name="Age") 
    private short age; 

    @Column(name="IdentificationNumber") 
    @GeneratedValue 
    @Id 
    private long identificationNumber; 

    @Column(name="Name") 
    private String name; 

    @Column(name="Surname") 
    private String surname; 

    public Personnel() { 
    } 

    public short getAge() { 
     return this.age; 
    } 

    public void setAge(short age) { 
     this.age = age; 
    } 

    public long getIdentificationNumber() { 
     return this.identificationNumber; 
    } 

    public void setIdentificationNumber(long identificationNumber) { 
     this.identificationNumber = identificationNumber; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSurname() { 
     return this.surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 
} 
+0

我解決我的problem.It原因如果你的數據庫上創建自己的模式,您導入實體類上的表註解.. – 2012-08-01 18:38:21

0

現在看起來像是數據庫中沒有這樣的表; Eclipse鏈接會查看映射併發出SQL,這在DB中失敗。也許你沒有連接到正確的模式,或者你需要一個@Table註釋上Personnel,如果它被稱爲在SQL服務器上的其他方式,即:

@Entity 
@Table(name="...") 
public class Personnel{ } 

顯示你的實體和表定義會有所幫助。

1

我解決了我的問題。它會導致如果你在你的數據庫上創建自己的模式,你可以在你的表註釋中導入你的實體類。 例如:

@Table(name="Example",schema="Example",catalog="Example")