标签: hbm

重用HQL命名查询片段

我正在使用HQL命名查询(在XML文件中定义)来使用Hibernate查询我的数据库.有些查询非常复杂,我发现自己将一个查询的大部分内容复制粘贴到另一个查询,类似的查询.

我想知道是否有可能在"命名查询片段"中定义公共部分并在我的所有查询中重用该片段?

我不想使用标准API,顺便说一句,因为我觉得在XML中制定查询更加舒服.其中一些已经是一个非常怪物,用API实现它们会使它们更加难以理解.

hibernate hql hbm named-query

6
推荐指数
0
解决办法
647
查看次数

在Xml映射中使用Hibernate设置创建和更新时间

我正在使用Hibernate和Xml映射.我有一个实体有两个字段creationDateupdateDate类型timestamp,当实体被持久化和更新时,必须填充当前的UTC时间.我知道@PrePersist@PreUpdate注释的存在,但我不知道如何在我的Xml映射中使用它们的等价物.

再一次,我想知道Hibernate是否以某种方式支持本地更新和创建时间设置.

谢谢

orm hibernate hbm hibernate-mapping

5
推荐指数
1
解决办法
9421
查看次数

流利的NHibernate和存储过程

我有一个基本的Customer/Order/OrderItem/Product对象图.客户有多个订单,订单有多个订单商品,产品有许多订单商品.使用FNH成功映射了这些.

我遇到了配置存储过程和fluent-nhibernate的问题.在fluent-hibernate FNH(版本1.0 RTM)中,没有一种本地方法可以映射存储过程.这里有一个关于向类映射添加部件的解决方案,但AddPart调用已经从FNH的发布中取出.

存储过程很简单:

CREATE PROCEDURE [dbo].[OrderCountByCustomer] 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        c.name as [Customer.Name],
        CAST(count(o.id) as NVARCHAR) as [Customer.OrderCount]
    FROM customer c
        LEFT OUTER JOIN [order] o
        ON o.customer_id = c.id
    GROUP BY c.name

END
Run Code Online (Sandbox Code Playgroud)

在中有一个CustomerOrderSummary.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NVAble.Orders.Core" namespace="NVAble.Orders.Core">
    <sql-query name="OrderSummary">
        <return class="CustomerOrderSummary">
            <return-property column="Customer.Name" name="CustomerName" />
            <return-property column="Customer.OrderCount" name="OrderCount" /> 
        </return>
        EXEC [OrderCountByCustomer]
    </sql-query>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

这是CustomerOrderSummary类def:

namespace NVAble.Orders.Core
{
    public class CustomerOrderSummary
    {
        virtual public string CustomerName { get; …
Run Code Online (Sandbox Code Playgroud)

nhibernate stored-procedures hbm fluent-nhibernate

4
推荐指数
1
解决办法
9940
查看次数

失败的hibernate映射:表X中的关联指的是未映射的类Y.

嗨,我正在尝试映射这个pojo Rent类来创建他的hibernate映射文件.

Rent.java(POJO):

  public class Rent implements Serializable {

     private static final long serialVersionUID = 1L;

       Employee employee;
       Client client;
       Car car;

    /* + getter and setter... */
  } 
Run Code Online (Sandbox Code Playgroud)

我的目的是创建一个web应用程序,用户可以设置哪个员工租了一辆车到客户端.所以这是我试过的实现

Rent.hbm.xml:

<hibernate-mapping>
  <class name="com.google.musicstore.domain.Rent" table="RENT">
    <id name="id" column="RENT_ID">
       <generator class="native"/>
    </id>
    <one-to-one name="car"  class="com.project.domain.Car"
       cascade="save-update">
    </one-to-one>
    <one-to-one name="client"  class="com.project.domain.Client"
       cascade="save-update">
    </one-to-one>
    <many-to-one name="employee"  class="com.project.domain.Employee"
       cascade="save-update">
    </many-to-one>
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

   [java] Initial SessionFactory creation failed.org.hibernate.MappingException: An association from the table RENT refers to an unmapped class: com.project.domain.Employee
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?感谢您的帮助.

我还映射了hibernate.cfg.xml …

hibernate hbm pojo hibernate-mapping

4
推荐指数
2
解决办法
2万
查看次数

随着NHibernate 4的升级而破坏变化

我可以在NHibernate 4.0中看到新的和修复的内容

我想知道是否有人遇到从NHibernate 3升级到4的hbm映射问题?

我担心这些日子会更加注重流畅的绘图.我可以测试更明显的重大变化,但想知道是否有任何人在生产环境中遇到的任何细微问题,一开始可能不那么明显.

它看起来像是一次重大升级,你可能会有回归的风险.

c# nhibernate hbm nhibernate-3 nhibernate-4

4
推荐指数
3
解决办法
7777
查看次数

NHibernate存储过程问题

我正在努力让我的存储过程与NHibernate一起工作.从SP返回的数据与任何数据库表都不对应.

这是我的映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="DomainModel.Entities">

    <sql-query name="DoSomething">
        <return class="SomeClass">
            <return-property name="ID" column="ID"/>
        </return>
        exec [dbo].[sp_doSomething]
    </sql-query>

</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

这是我的域类:

namespace DomainModel.Entities
{
    public class SomeClass
    {
        public SomeClass()
        {
        }
        public virtual Guid ID
        {
            get;
            set;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,它失败了

Exception Details: NHibernate.HibernateException: Errors in named queries: {DoSomething}
Run Code Online (Sandbox Code Playgroud)

在第80行

Line 78:             config.Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NHibernate.config"));            
Line 79: 
Line 80:             g_sessionFactory = config.BuildSessionFactory();       
Run Code Online (Sandbox Code Playgroud)

当我调试NHibernate代码时,似乎SomeClass没有添加到persister字典中,因为hbm.xml中没有定义类映射(只有sql-query).后来在CheckNamedQueries函数中,它无法找到SomeClass的persistor.

我已经检查了所有显而易见的事情(例如将hbm作为嵌​​入式资源)并且我的代码与我在网络上找到的其他示例没有太大的不同,但不知怎的,我无法让它工作.知道如何解决这个问题吗?

nhibernate hbm

3
推荐指数
1
解决办法
2209
查看次数

Nhibernate与子对象插入错误的一对一映射问题

因为以下Nhibernate问题,我整天都在用桌子敲打桌子.

每个银行帐户都有一组(且只有一组)与之关联的费率.银行帐户表的主键BankAccountID也是外键和AccountRate表中的主键.

public class BankAccount
{
    public virtual int BankAccountId { get; set; }
    public virtual string AccountName { get; set;}
    public virtual AccountRate AccountRate {get;set;}
}

public class AccountRate
{
    public virtual int BankAccountId { get; set; }
    public virtual decimal Rate1 { get; set; }
    public virtual decimal Rate2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我为BankAccount提供了以下HBM映射:

<class name="BankAccount" table="BankAccount">
<id name ="BankAccountId" column="BankAccountId">
  <generator class="foreign">
    <param name="property">
      AccountRate
    </param>
  </generator>
</id>
<property name ="AccountName" column="AccountName" />
<one-to-one name="AccountRate" class="AccountRate" …
Run Code Online (Sandbox Code Playgroud)

nhibernate hbm one-to-one

3
推荐指数
1
解决办法
4656
查看次数

生成的完整构造函数包含太多的参数

我有一个包含许多字段的数据库表,当我使用Hibernate .hbm文件为该表生成POJO时会导致问题.问题是生成的完整构造函数为Java生成了太多的参数,这会引发编译器错误:

参数太多,参数xxxx超出了可用于方法参数的255个字的限制

我想通过抑制Hibernate生成完整构造函数来解决这个问题.我的问题是

  1. 如果我没有完整的构造函数,Hibernate会在运行时中断吗?
  2. 我怎么能告诉我的hbm不要生成完整的构造函数?

提前感谢您的任何答案.

hibernate hbm

3
推荐指数
1
解决办法
1769
查看次数

failed.org.hibernate.MappingException:无法确定类型:String,列:[org.hibernate.mapping.Column(db col name)

我正在使用Net Beans IDE,当我开始部署我的Web项目时,它会在控制台输出中显示错误信息:

failed.org.hibernate.MappingException: Could not determine type for: String, for columns: [org.hibernate.mapping.Column(db col name)
Run Code Online (Sandbox Code Playgroud)

从消息中它无法转换类型; 我试图检查我的文件.hbm和.java中的类型,但到目前为止没有运气.

抛出此错误的属性定义为

<property name="exemptionOwnerName1" type="String">
Run Code Online (Sandbox Code Playgroud)

hibernate hbm

3
推荐指数
1
解决办法
7621
查看次数

修改nHibernate如何在nServiceBus中保存Saga数据

我有一个问题,我正在向nServiceBus发送一条消息数据字段为可变长度的消息.nServiceBus正在使用nHibernate来创建一个名为的表

[NServiceBus].[PendingMentorEmailSagaData] 
Run Code Online (Sandbox Code Playgroud)

来自一个名为PendingMentorEmailSagaData的类.然而,消息字段被设置为nvarchar(255),我正在寻找一种方法将它设置为nvarchar(MAX).

我尝试过使用嵌入式hbm文件,但是出现了" persistent class PendingMentorEmailSagaData not found"错误.

这可能意味着我无法弄清楚要设置文件的类.

hbm文件:

<?xml version="1.0" encoding="utf-8" ?>

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
      <class name="PendingMentorEmailSagaData">
        <id name="Id" />
        <property name="OriginalMessageId" />
        <property name="Originator" />
        <property name="PendingMentorEmailCommandId" />
        <property name="JobBoardCode" />
      </class>
    </hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

PendingMentorEmailSagaData是saga数据类的名称.

c# nhibernate nservicebus hbm

3
推荐指数
1
解决办法
870
查看次数

在session.GetNamedQuery()上获取"命名查询不知道"错误

调用session.GetNamedQuery()时,我一直得到一个"命名查询未知"的MappingException.我正在使用Fluent和NHibernate 3.0,我在hbm.xml文件中有查询.为了简单起见,我在同一个程序集中拥有所有内容.我已将xml文件上的Build Action设置为"Embedded Resource".

我的配置如下所示:

var nhConfig = Fluently.Configure()
                    .Database(SQLAnywhereConfiguration
                  .SQLAnywhere10
                  .ConnectionString("uid='dba'; pwd='sql'; dsn=db"))
                  .ExposeConfiguration(c => c.SetProperty("current_session_context_class", "thread_static"))
                  .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Party>())
                  .BuildConfiguration();

            var sessionFactory = nhConfig.BuildSessionFactory();


            ISession session = sessionFactory.OpenSession();
            CurrentSessionContext.Bind(session);


            NHibernate.IQuery q = session.GetNamedQuery("GetFirstParty");
Run Code Online (Sandbox Code Playgroud)

我的GetFirstParty.hbm.xml文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

  <query name="GetFirstParty">
    <![CDATA[from Party p where p.CaseNumber = :CaseNumber]]>
  </query>

</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

我在这里失踪了什么?

请帮忙.

谢谢,

麦克风

nhibernate session hbm

2
推荐指数
1
解决办法
4095
查看次数

Hibernate - 从注释到 hbm.xml 的级联类型

目前要求我将 POJO 休眠注释转换为 hbm.xml 文件,

但我遇到了两个我无法“翻译”的注释,并且没有找到我的问题的完整答案,

我应该使用什么级联类型来反映以下内容:1)

@Cascade({CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.SAVE_UPDATE })
Run Code Online (Sandbox Code Playgroud)

2)

@Cascade({CascadeType.MERGE})
Run Code Online (Sandbox Code Playgroud)

提前致谢。

java hibernate hbm hibernate-mapping jakarta-ee

2
推荐指数
1
解决办法
9346
查看次数

1
推荐指数
1
解决办法
555
查看次数