如何将参数传递给Hibernate的subselect标签?

时间:2009-08-10 08:35:06

标签: java hibernate parameters readonly subquery

hibernate section 5.1.3末尾的示例未显示传递参数的示例。

  

视图之间没有区别   和一个Hibernate的基表   映射。这是透明的   数据库级别,虽然有些DBMS可以   特别是不能正确支持观点   有更新。有时你想   使用视图,但不能创建一个   在数据库中(即具有遗产   模式)。在这种情况下,您可以映射一个   不可变和只读实体到   给定SQL子选择表达式:

<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>

有可能吗?如果是这样,怎么样?

谢谢, 弗朗兹

3 个答案:

答案 0 :(得分:1)

我不认为这是可能的,因为映射文件就像一个静态描述。

答案 1 :(得分:0)

从Hibernate 3开始,您可以使用公式来映射这种类型的只读计算字段。示例:

@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;
}

此示例带有Annotated属性,但您可以在映射文件中执行相同的操作。

答案 2 :(得分:0)

在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" />