Frage

Ich habe das Hibernate-Projekt mit Spring Template-Projekt erstellt. Zwei Domänenobjekte, ein JUnit-Test, app-context.xml und die Persistenz-context.xml erstellt wurden. Jetzt bemerkte ich diese Zeile

<jdbc:embedded-database id="dataSource"></jdbc:embedded-database>

und setzen voraus, dass die folgenden Ereignisse eintritt

  1. Ein Standard HQSL db wird verwendet,
  2. Die beiden erstellten Modelle Order.java & Item.java wird in Speichertabellen T_ORDER und T_ITEM und diese werden abgebildet, wie pro Anmerkungen auf die Objekte automatisch erstellt. Innerhalb der Auto erstellt Klassen eine der Testmethoden ist folgt als

    @Test
    @Transactional
    public void testSaveAndGet() throws Exception {
        Session session = sessionFactory.getCurrentSession();
        Order order = new Order();
        order.getItems().add(new Item());
        session.save(order);
        session.flush();
        // Otherwise the query returns the existing order
        // (and we didn't set the parent in the item)...
        session.clear();
        Order other = (Order) session.get(Order.class, order.getId());
        assertEquals(1, other.getItems().size());
        assertEquals(other, other.getItems().iterator().next().getOrder());
    }
    

Fragen ...

  1. Am korrigieren ich denke, dass die in Speichertabellen aus den Domain-Modelle (Order / Item) erstellt und abgebildet? Daher session.flush () synchronisieren, das Objekt zu dem physischen (in Speichertabelle) ....
  2. Sind diese Tabellen automatisch gemappt, denn wenn ich tue das folgende

    session.save(order);
    session.flush();
    session.clear();
    Order other = (Order) session
       .createQuery("from T_ORDER where ORDER_ID =: orderid")
       .setLong("orderid", order.getId())
       .uniqueResult();
    

i eine Ausnahme erhalten ...

org.hibernate.hql.ast.[B]QuerySyntaxException[/B]: \
T_ORDER is not mapped [from T_ORDER where ORDER_ID =: orderid]
............
............

Wenn diese Tabellen werden automatisch nicht abgebildet, wie wird Spülung an erster Stelle zu arbeiten?

War es hilfreich?

Lösung

Tabellenerstellung ist eine Funktion von Hibernate (und anderem JPA proviers). Es stattfindet, wenn die Anwendung / Test beginnt. Es hat nichts mit jeder Abfrage zu tun. Selbst wenn Sie nur Ihren Test starten, mit Hibernate ausgeführt und konfiguriert ist, kann es die Tabellen erstellen.

Wenn Hibernate die Tabellen erstellen, fallen alte einmal, und so weiter, ist abhängig von der Konfiguration: die Eigenschaft: hibernate.hbm2ddl.auto verwendet wird, was Hibernate tun, wenn seine beginnt. Zum Beispiel wird der Wert update fügen Sie keine Tabellen und Spalten vorhanden sind.

Weitere Informationen finden Sie in der Dokumentation zu finden .

Ihre Exception Wenn Sie Hibernate und Schreib Hibernate verwendet Anweisungen Abfrage, dann müssen Sie HQL und nicht SQL verwenden. - Der Hauptunterschied besteht darin, dass HQL auf den Klassen beruht aber nicht auf den Tischen. Also in Ihrem Fall müssen Sie nicht verwenden T_ORDER, aber Order (das gleiche gilt für die ID, müssen Sie die Eigenschaft / Feldnamen verwenden, aber nicht der Spaltenname).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top