【问题标题】:Hibernate: Set a default in many-to-one class mappingHibernate:在多对一类映射中设置默认值
【发布时间】:2011-12-15 15:54:35
【问题描述】:

我正在尝试将类语言映射到类用户。

多对一映射工作正常,通过应用程序的功能,我可以将值从默认的 null 设置为特定值。

问题是我想将默认映射设置为 idLanguage 1,但是当它映射时,所有内容都设置为 null。

我试过了:

< many-to-one name="language" class="com. \etc\ .language.Language" column="language" default="1" lazy="false" />

但是,这给了我一个错误“必须为元素类型多对一声明属性默认值。

怎么办?

(注意:语言映射到用户类中的语言对象,而不是语言id。在应用程序中设置将语言的id放在语言列中,替换空值)

【问题讨论】:

    标签: java xml hibernate mapping hql


    【解决方案1】:

    我希望这些语言将成为您应用程序中的种子数据。然后在 User 映射中有一个单独的 langId 字段并将其设置为 1。加载 User bean 时可以使用 Object 映射。因此修改映射如下。

    < many-to-one name="language" class="com. \etc\ .language.Language" column="language" lazy="false" insert="false" update="false"/>
    
    <property name="langId" column="language"/>
    

    这种方式将更具执行性,因为您不必在保存 User bean 之前从 DB 中获取 Languages bean。在加载用户时,这些语言也将可用。

    【讨论】:

    • 好的,我试过了,得到了这个错误:org.hibernate.PropertyAccessException: Null value was assigned to a property of original type setter of com.\etc\.user.User.langID
    • 即私有 int langID = 1; w/在用户类中获取/设置
    • 在保存用户 bean 之前,使用 User 类中的 setLangID() 方法将 langId 的值设置为 1。
    • 恐怕不工作,它给了我线程内的空指针。
    • 它没有用,所以我尝试设置一个简单的 if(user.getLanguage==null){Language newLang = new Language(); newLang.setIdLang(1); user.setLanguage(newLang)};这仍然给出了一个空指针。当然,这应该会看到空值,然后就可以了,执行此操作。 :(
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2015-06-19
    • 2017-06-24
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多