2009-08-10 3 views
0

Das Beispiel am Ende von hibernate section 5.1.3 zeigt kein Beispiel für das Übergeben von Parametern.Wie übergeben Sie Parameter an Hibernate Subselect-Tag?

Es gibt keinen Unterschied zwischen dem Ziel und einer Basis Tabelle für einen Ruhezustand Mapping. Dies ist auf der Datenbankebene transparent, obwohl einige DBMS Ansichten nicht ordnungsgemäß unterstützen, insbesondere mit Updates. Manchmal möchten Sie eine Ansicht verwenden, aber Sie können keine in der Datenbank erstellen (d. H. Mit einem älteren Schema ). In diesem Fall können Sie eine unveränderlich und Nur-Lese-Einheit zu einem gegeben SQL subselect Ausdruck Karte:

<class name="Summary"> 
    <subselect> 
     select item.name, max(bid.amount), count(*) 
     from item 
     join bid on bid.item_id = item.id 
     group by item.name 
    </subselect> 
    <synchronize table="item"/> 
    <synchronize table="bid"/> 
    <id name="name"/> 
    ... 
</class> 

Ist es möglich? Und wenn ja, wie?

Danke, Franz

Antwort

1

Ich glaube nicht, dass es möglich ist, weil die Zuordnungsdatei wie eine statische Beschreibung ist.

0

Seit Hibernate 3 können Sie Formeln verwenden, um diese Arten von schreibgeschützten Feldern zuzuordnen. Beispiel:

@Formula("(SELECT b.BANK_NAME FROM " + 
     " BANK_INFORMATION b, BILLING_AGENT_BANK ba " + 
     " WHERE ba.CNPJ = COMPANY_CNPJ " + 
     " AND b.BANK_ID = ba.BANK_ID)") 
public String getBankName() { 
    return bankName; 
} 

Dieses Beispiel ist mit einer Kommentierte Eigenschaft, aber Sie können das gleiche in der Zuordnungsdatei tun.

0

In NHibernate:

<class name="Blog" mutable="false"> 
<subselect> 
    SELECT Blog.Id, Blog.Author, Blog.Title, Comment.Comment 
    FROM Blog INNER JOIN Comment ON Blog.Id = Comment.Blog_id 
    WHERE Comment.LanguageId = :blogcomment.languageId 
</subselect> 
<id name="Id"> 
    <generator class="assigned" /> 
</id> 
<property name="Author" /> 
<property name="Title" /> 
<property name="Comment" /> 

Verwandte Themen