我想从sql server数据库获取数据,所以我使用jdbc驱动程序和eclipselink orm framework.I有一些问题。这是我的例子,
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 :(得分:1)
我解决了我的问题。如果您在数据库上创建自己的架构,则会导致在表注释中导入实体类。 例如:
@Table(name="Example",schema="Example",catalog="Example")
答案 1 :(得分:0)
现在看来,数据库中没有这样的表格; Eclipse链接看到映射并发出SQL,这在DB中失败。也许你没有连接到正确的模式,或者你需要在@Table
上使用Personnel
注释,如果它在SQL服务器中以其他方式调用,即:
@Entity
@Table(name="...")
public class Personnel{ }
显示您的实体和表格定义会有所帮助。
答案 2 :(得分:0)
我有一个数据库和模式。我的表在这个模式里面。我连接到localhost。
包实体;
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;
}
}