【问题标题】:Generate JDO objects from existing database从现有数据库生成 JDO 对象
【发布时间】:2011-09-01 13:21:28
【问题描述】:

是否有从现有数据库生成 JDO 对象的工具?我更喜欢一个看起来很棒的 Eclipse 插件,我可以用它来生成和维护对象,但它似乎目前不存在。还有其他生成数据库对象的简单工具吗?

【问题讨论】:

    标签: java database orm jdo datanucleus


    【解决方案1】:

    JDO 对象不是数据库行的简单包装器(尽管如果您愿意,您可以将 JDO 对象实现为数据库行的简单包装器)。因此,大多数自动化工具仅通过查看数据库不会知道对象将如何呈现。

    例如,像这样的对象:

    public class Person {
    
       private List<PhoneNumber> phoneNumbers;
    
       ...
    
       public List<PhoneNumber> getPhoneNumbers() {
         ...
       }
    
    }
    

    可能让 JDO 预取所有电话号码以直接包含到对象中。在关系数据库中,这可能通过在构造 Person 对象时将 PhoneNumber 数据库表与 Person 数据库表连接来完成。

    其他实现可能看起来像

    public class PhoneNumber {
    
       public Person getPerson() {
         ...
       }
    }
    

    并强制用户在单独的数据库请求中获取某人的电话号码。通用工具无法预测您希望使用哪种方式。有两种选择(如此处所示)很容易说“使其可配置!”但是,在组合添加八个或更多独立选项后,不清楚配置类生成是否会更容易(与直接编写类相反)。

    更不用说 JDO 并不是为类生成而设计的,事实上,它旨在让你的手写类在没有生成的情况下持久存在,因为当时的类生成技术留下了很多可见的垃圾(不受欢迎的命名模式,暴露出冲突的接口和方法等)。

    【讨论】:

    • 当表格 Person 与 PhoneNumber 有 N 关系时,工具应该能够注意到这一点吧?
    • @Roel Veldhuizen,是的,理论上的工具可以注意到数据库中的 1..N 关系;但是,它无法正确猜测程序如何最好地访问记录。例如,在提取联系人号码时最好包含联系人号码上的通话历史记录,或者独立于联系人号码提取通话记录可能会更好,或者最好是懒惰地提取历史记录,因为历史被探索。仅从 SQL 表中无法推断出程序需要信息的正确方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2010-10-27
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多