java - 为什么我的 Hibernate 实体中的字段为空?

标签 java hibernate dozer

我向 MSSQL 数据库中的表添加了一个新的整数列,然后相应地更新了该表的 Hibernate 实体的 .hbm.xml 和 .java 文件。我可以看到我已将“1”分配给我正在使用的给定行的列,但我为该行返回的实体的字段中具有空值。

更奇怪的是,通过使用断点检查该字段的 getter 和 setter 的使用情况,它们似乎在预期时接收并发送 1...尽管我创建的 boolean 辅助方法(如果值为 0,则返回 false;如果值为 1,则返回 true),将字段视为 null 并引发异常。即使在实体上调用 setter 之后也会发生这种情况。

对于为什么会发生这种情况有什么想法吗?我对 Hibernate 只是非常熟悉,但我怀疑这不是延迟加载问题,因为这是一个整数类型,而不是另一个实体。

编辑

这是我的 Hibernate 文件的相关部分。由于保密原因,我不能包含太多内容,但这应该足够通用。

<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 8-Sep-2011 3:31:37 PM by Hibernate Tools 3.2.4.GA -->
    <hibernate-mapping>
            <class name="net.company.EntityName" table="TableName" schema="dbo" catalog="database">
                <id name="id" type="int">
                    <column name="TableNameId" />
                    <generator class="identity" />
                </id>
                    ...
                <property name="cancelled" type="int">
                    <column name="Cancelled" />
                </property>
                <property name="cancelledOn" type="timestamp">
                    <column name="CancelledOn" length="23" />
                </property>
                <property name="cancelledBy" type="string">
                    <column name="CancelledBy" length="50" />
                </property>
                    ...
            </class>
    </hibernate-mapping>


    public Integer getCancelled() {
        return cancelled;
    }

    public void setCancelled(Integer cancelled) {
        this.cancelled = cancelled;
    }

    public boolean isCancelled() {
        return cancelled != null && cancelled == 1;
    }

    public Date getCancelledOn() {
        return cancelledOn;
    }

    public void setCancelledOn(Date cancelledOn) {
        this.cancelledOn = cancelledOn;
    }

    public void setCancelledBy(String cancelledBy) {
        this.cancelledBy = cancelledBy;
    }

    public String getCancelledBy() {
        return cancelledBy;
    }

我认为这可能是由于 Dozer 行为不当造成的,但以下是 dozer-mappings.xml 文件中与此实体相关的唯一映射:

<mapping>
    <class-a>net.company.EntityName</class-a>
    <class-b>net.company.EntityName</class-b>
</mapping>

最佳答案

两者

boolean isCancelled()

Integer getCancelled()

表示对同一属性的访问器已“取消” Java Beans spec ,它可以破坏 Hibernate 的属性发现逻辑。请尝试将 boolean 实用程序方法重命名为其他名称,例如:

boolean checkCancelled()

关于java - 为什么我的 Hibernate 实体中的字段为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831199/

相关文章:

java - 有人可以帮我这个骑士的旅游代码吗?

java - 将哈希函数委托(delegate)给 hibernate 中未初始化的委托(delegate)会导致更改哈希代码

java - Dozer,如何将 map 转换为复杂类型列表

java - 推土机试图将一个类映射到它的接口(interface)

logging - 如何关闭 log4j2 中的 Dozer 日志条目?

java - Microsoft Reporting Services Web 服务和 Java

java - 是否可以在 Eclipse JPA 工具中使用 Oracle 数据库同义词

java - Spring boot 2.0.3 + 安全性 + Oauth2 自动配置

java - 如何从 Hibernate Criteria 对象中获取绑定(bind)参数?

java - JPA 中实体列表的搜索和排序问题