2015-12-11 3 views
0

Я пытаюсь запросить db доступа в java 8, и я использую maven. Я использую net.ucanaccess.jdbc.UcanaccessDriver для моего соединения и ниже моего hibernate.cfg.xml:Hibernate - org.hibernate.MappingException при использовании net.ucanaccess.jdbc.UcanaccessDriver

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
    <property  
    name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.driver_class"> 
    net.ucanaccess.jdbc.UcanaccessDriver</property> 
    <property name="hibernate.connection.url">jdbc:ucanaccess://D:\\db\\QIDB-Access\\db.mdb</property> 
    <property name="hibernate.connection.username">  </property> 
    <property name="hibernate.connection.password">  </property> 
<mapping resource="IndikatorProcessor.hbm.xml" /> 
</session-factory> 
</hibernate-configuration> 

Мой класс с аннотациями выглядит следующим образом:

@Entity 
@Table(name = "Indikator") 
public class IndikatorProcessor { 

@Id 
@Column(name = "QI_ID") 
private int qiId; 

public int getQiId() { 
    return qiId; 
} 

public void setQiId(int qiId) { 
    this.qiId = qiId; 
} 

} 

В другом классе я создаю сессию и написать простой запрос:

.... 
    public void listQIIndikator() { 
    Session session = factory.openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.beginTransaction(); 
     List<?> indikators = session.createQuery("From IndikatorProcessor").list(); 
     for (Iterator<?> iterator = indikators.iterator(); iterator.hasNext();) { 
      IndikatorProcessor indiaktor = (IndikatorProcessor) iterator.next(); 
      System.out.println("Indikator ID = " + indiaktor.getQiId()); 
     } 
     tx.commit(); 

Я получаю эту ошибку:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: IndikatorProcessor is not mapped 

Я не уверен, что вызывает ошибку, так как она отображается! Это запрос или использование драйвера ucanaccess для подключения?

Теперь я добавил IndikatorProcessor.hbm.xml как folow и сменил файл спящего режима, чтобы использовать его.

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
<class name="IndikatorProcessor" table="Indikator"> 
    <meta attribute="class-description"> 
    This class contains the Indikator detail. 
    </meta> 

    <id name="qiId" type="int" column="QI_ID"> <!-- <generator class="native"/> --> </id> 

<!-- <property name="qiId" column="QI_ID" type="int"/> --> 
    <property name="fkQig" column= "FK_QIG"></property> 

Теперь я получаю эти ошибки:

Caused by: org.hibernate.MappingException: class IndikatorProcessor not found while looking for property: fkQig 

и

Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [IndikatorProcessor] 
+0

Вы используете неправильный говор .. –

+0

Есть специфический диалект для доступа? – Iman

+1

Здесь http://stackoverflow.com/questions/1749464/how-can-i-use-hibernate-with-ms-access Я нашел SQLServerDialect, но он не работает либо – Iman

ответ

1

Исключение говорит ваш IndikatorProcessor не отображается в SessionFactory, так что отображение в следует:

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.driver_class"> net.ucanaccess.jdbc.UcanaccessDriver</property> 
    <property name="hibernate.connection.url">jdbc:ucanaccess://D:\\db\\QIDB-Access\\db.mdb</property> 
    <property name="hibernate.connection.username"> </property> 
    <property name="hibernate.connection.password"> </property> 
    <mapping class="your.package.IndikatorProcessor"/> 
</session-factory> 
</hibernate-configuration> 
1

спящий режим не может найти класс, не давая имя пакета. Я добавил имя пакета в IndikatorProcessor.hbm.xml, и он сработал.

<hibernate-mapping> 
<class name="model.IndikatorProcessor" table="Indikator"> 
    <meta attribute="class-description"> 
    This class contains the Indikator detail. 
    </meta> 
    <id name="qiId" type="int" column="QI_ID"> </id> 

    <property name="fkQig" type ="int" column= "FK_QIG"></property>