# Eclipse RCP - no persistent classes found for query class



## algebraiker (17. Okt 2011)

Hi,

kämpfe noch immer damit, dass die Datensätze in meiner View nicht zu sehen sind. 

Hier die Fehler- und Warnmeldung, woran es (wahrscheinlich) liegt:



> 17.10.2011 13:08:43 org.hibernate.annotations.common.Version <clinit>
> INFO: HCANN000001: Hibernate Commons Annotations {4.0.0.CR2}
> 17.10.2011 13:08:43 org.hibernate.Version logVersion
> INFO: HHH000412: Hibernate Core {4.0.0.CR4}
> ...



Die Klasse Article sieht so aus:


```
package model;

import javax.persistence.Column;
import javax.persistence.Entity;

@SuppressWarnings("serial")
@Entity
public class Article extends BaseEntity {

   @Column(nullable = false, unique = true)
   private String number;

   @Column(nullable = false)
   private String name;

   private float price;
   
   public String getNumber() {
      return number;
   }

   public void setNumber(String number) {
      this.number = number;
   }

   public String getName() {
      return name;
   }

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

   public float getPrice() {
      return price;
   }

   public void setPrice(float price) {
      this.price = price;
   }
}
```

Model Provider und die View:


```
package model;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class ModelProvider {
   public static  ModelProvider INSTANCE = null;
   private List<Article> articles;

   @SuppressWarnings("unchecked")
   private ModelProvider()
   {
      EntityManagerFactory emf = Persistence.createEntityManagerFactory("adb");

      // First unit of work
      EntityManager em = emf.createEntityManager();
      EntityTransaction tx = em.getTransaction();
      
      tx.begin();
      List l = em.createQuery("select a from model.Article a").getResultList();
      articles = new ArrayList<Article>();
      for(Iterator i = l.iterator(); i.hasNext();)
      {
          Article a = (Article) i.next();
          articles.add(a);
      }
      //System.out.println(articles.get(0).getName());
   }
   
   public List<Article> getArticles() {
      return articles;
   }
   
   public static ModelProvider getInstance()
   {
      if (INSTANCE == null) {
         INSTANCE = new ModelProvider();
      }
      
      return INSTANCE;
   }
}
```


```
package toolproject;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;

import model.Article;
import model.ModelProvider;

public class View extends ViewPart {
   public static final String ID = "ToolProject.view";

   private TableViewer viewer;
   
   public void createPartControl(Composite parent) {
      GridLayout layout = new GridLayout(2, false);
      parent.setLayout(layout);
      Label searchLabel = new Label(parent, SWT.NONE);
      searchLabel.setText("Search: ");
      final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH);
      searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
            | GridData.HORIZONTAL_ALIGN_FILL));
      createViewer(parent);
   }

   private void createViewer(Composite parent) {
      viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
            | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
      createColumns(parent, viewer);
      final Table table = viewer.getTable();
      table.setHeaderVisible(true);
      table.setLinesVisible(true);

      viewer.setContentProvider(new ArrayContentProvider());
      // Get the content for the viewer, setInput will call getElements in the
      // contentProvider
      viewer.setInput(ModelProvider.getInstance().getArticles());
      // Make the selection available to other views
      getSite().setSelectionProvider(viewer);
      // Set the sorter for the table

      // Layout the viewer
      GridData gridData = new GridData();
      gridData.verticalAlignment = GridData.FILL;
      gridData.horizontalSpan = 2;
      gridData.grabExcessHorizontalSpace = true;
      gridData.grabExcessVerticalSpace = true;
      gridData.horizontalAlignment = GridData.FILL;
      viewer.getControl().setLayoutData(gridData);
   }

   public TableViewer getViewer() {
      return viewer;
   }

   // This will create the columns for the table
   private void createColumns(final Composite parent, final TableViewer viewer) {
      String[] titles = { "Number", "Name", "Price"};
      int[] bounds = { 100, 100, 100};

      // First column is for the first name
      TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0);
      col.setLabelProvider(new ColumnLabelProvider() {
         @Override
         public String getText(Object element) {
            Article a = (Article) element;
            return a.getNumber();
         }
      });

      // Second column is for the last name
      col = createTableViewerColumn(titles[1], bounds[1], 1);
      col.setLabelProvider(new ColumnLabelProvider() {
         @Override
         public String getText(Object element) {
            Article a = (Article) element;
            return a.getName();
         }
      });

      // Now the gender
      col = createTableViewerColumn(titles[2], bounds[2], 2);
      col.setLabelProvider(new ColumnLabelProvider() {
         @Override
         public String getText(Object element) {
            Article a = (Article) element;
            return ""+a.getPrice();
         }
      });
   }

   private TableViewerColumn createTableViewerColumn(String title, int bound, final int colNumber) {
      final TableViewerColumn viewerColumn = new TableViewerColumn(viewer,
            SWT.NONE);
      final TableColumn column = viewerColumn.getColumn();
      column.setText(title);
      column.setWidth(bound);
      column.setResizable(true);
      column.setMoveable(true);
      return viewerColumn;

   }

   
/**
    * Passing the focus request to the viewer's control.
    */

   public void setFocus() {
      viewer.getControl().setFocus();
   }
}
```

persistence.xml


```
<?xml version="1.0" encoding="UTF-8" ?>
<persistence 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_1_0.xsd" version="1.0">

    <!-- JPA test "unit" -->
    <persistence-unit name="adb" transaction-type="RESOURCE_LOCAL" >
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
         
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/prog"/>
            <property name="hibernate.connection.username" value="postgres"/>
            <property name="hibernate.connection.password" value="postgres"/>
            <property name="hibernate.connection.pool_size" value="5"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>

</persistence>
```

Hat jemand eine Idee, woran es liegt und was ich tun muss, damit es funktioniert? Google brachte - mal wieder - wenig.


----------



## Atze (17. Okt 2011)

java.io.FileNotFoundException: C:\workspace\ToolProject\bin (access is denied)

hört sich nach windows UAC an. schonmal nen workspace auf D: o.ä. erstellt und dort versucht?


----------



## algebraiker (17. Okt 2011)

Hi,

leider habe ich keine andere Partition, die ich verwenden könnte und komischerweise ist auch jeder Ordner unter meinem Windows 7 schreibgeschützt. "Rechtsklick -> Eigenschaften -> Attribute: Schreibgeschützt aufheben" bringt auch nichts, denn sobald ich das Eigenschaften-Fenster geschlossen habe, ist es wieder als schreibgeschützt markiert. 

Diese Exception verstehe ich ohnehin nicht, da ich keinerlei Files in meinem Projekt (im Code) verwende.

Was mir noch Kopf zerbrechen macht, ist, folgende Stelle in ModelProvider.java:


```
List l = em.createQuery("select a from model.Article").getResultList();
		articles = new ArrayList<Article>();
		for(Iterator<Article> i = l.iterator(); i.hasNext();)
		{
		 	Article a = i.next();
		 	articles.add(a);
		}
```

Wenn ich die Länge des Arrays ausgeben möchte, bekomme ich da 0 zurück. 


```
List l = em.createQuery("from model.Article").getResultList();
		articles = new ArrayList<Article>();
		for(Iterator<Article> i = l.iterator(); i.hasNext();)
		{
		 	Article a = i.next();
		 	articles.add(a);
		}
		System.out.println("Länge der Article-Arrayliste: " + articles.size());
```


```
17.10.2011 14:30:58 org.hibernate.hql.internal.QuerySplitter concreteQueries
WARN: HHH000183: no persistent classes found for query class: from model.Article
Länge der Article-Arrayliste: 0
```

Allerdings bekomme ich die View ja zu sehen, nur sieht man die Datensätze eben nicht - ich vermute ja wegen der obigen Warnung.


----------



## algebraiker (18. Okt 2011)

Hi,

auch auf einer anderen Partition ist das Ergebnis dasselbe. Weiß jemand Rat, wie ich das lösen könnte?


----------



## algebraiker (18. Okt 2011)

Hi,

okay, das Problem scheint fast gelöst zu sein. Hier  fand ich folgendes stehen:



> But is it a requirement to have the EntityManagerFactory in the same bundle as the persistence.xml?
> Apparently it is... so now it works



So auch bei mir. Das ist insofern komisch, als dass ich im Classpath den Pfad dazu schon angegeben habe. Aber nun gut.. Nachdem ich die persistence.xml in den Bibliotheksordner schob, wo sich hibernate-entitymanager-4.0.0.CR4.jar befindet, funktioniert das Ganze und ich bekomme die Werte aus meiner Datenbank, aber obige FileNotFoundException mit dem Access is denied kriege ich nach wie vor geschmissen. 

Jemand eine Idee, woran das liegt?


----------

