java - 如何优雅地处理Target Unreachable

标签 java hibernate jsf ejb

我有两个关于常见的目标无法到达异常的问题。 处理它的最佳做法是什么,例如您有: 国家有城市,城市有街道。 - 你是否放入 Country 的构造函数 new City() 和 City 的构造函数 new Street() (这样你就可以以某种方式将它们放在一个集中的地方,但总是制作你可能不需要的对象) 或者您在代码中需要它们的各个位置初始化对象? (遍布您的代码) - 如果用户没有输入 Street 的任何内容,以防止在数据库中插入空白行 你把街道放回零。将其恢复为 null 的最佳位置在哪里? (假设您有 Cascade.ALL 或扩展上下文,否则如果您知道它是空的,您就不会保存它)

PS:为什么 JSF 不只是实例化它需要的东西,而 Hibernate 不持久化所有持久字段为空的实体? 为了性能还是为什么?再说一遍,数据库中只有 PK 和 FK 的空行是不是不好?

最佳答案

我认为这取决于应用程序中实体之间的关系。在某些情况下,我确实会在构造函数中加载另一个对象的相关实例,但仅限于没有一个实体而没有另一个实体的情况。

一种替代方法是在 getter 中延迟创建对象:

public class Country {

    private City city;

    public City getCity() {
        if (this.city == null) {
            this.city = new City();
        }

        return this.city;
    }

}

就 PS 问题而言,JSF 不会为您实例化对象——我不确定这是否可取……但是如果您使用惰性 getter 方法,您实际上会得到同样的结果。如果 Hibernate 会持久化一个已实例化的实体,因为它会持久化可持久对象模型的当前状态,如果它没有持久化该实体,它就不会按预期工作。

我通常不会担心一些空行,因为我选择使用 Hibernate,因为我知道 ORM 会带来一些小的性能成本。对我来说,享受坚持的抽象仍然是非常值得的。

关于java - 如何优雅地处理Target Unreachable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5983410/

相关文章:

java - 编码错误?

jsf - ManagedProperty 未注入(inject) @FacesConverter

java - 使用接口(interface)将字符串从适配器传递到 fragment

java - 合适的zookeeper版本是什么?

java - ErrorCounter 意外 token 在哪里 - Hibernate

java - Hibernate中子实体中排除基本实体的ID属性

spring - Maven Multi Module坚持在业务模块中复制datasource application.properties

Jquery 使用 JSF 隐藏文本

java - 我无法理解以下代码中的某一行

java - 将PayPal功能集成到Java中