代码之家  ›  专栏  ›  技术社区  ›  Rich Apodaca

使用活动对象ORM for Java的经验?

  •  13
  • Rich Apodaca  · 技术社区  · 16 年前

    我正在研究面向Java和Java的ORMs Active Objects 引起了我的注意。显然是这样 inspired by Rails' ActiveRecord

    4 回复  |  直到 12 年前
        1
  •  9
  •   Tristan Juricek    16 年前

    小心别误入“银弹综合症”。。。我只是听到开发人员说“约定优先于配置”,并认为这是一件很棒的事情。。。

    Daniel Spiewak 他是一个可靠的程序员,我从他的博客中学到了很多,但这是一个相当简单的API。这意味着,不要期望在生产使用、在高负载环境中工作等方面有大量经验。但有时,您所需要的只是简单的,还有其他项目,如 Databinder 与活动对象集成的。(Wicket+Databinder是一个非常好的轻量级Java web框架。)

    但是,例如,如果我做了大量的批处理,我会远离这样的持久性框架。主要是因为我想:

    1. 默认情况下是不可变对象,这自然会进入多线程处理,因为您强制人们使用“删除/创建新对象”而不是“更新”之类的范例,这在许多数据库中节省了大量磁盘使用量。
    2. DB access,它考虑通过使用专门的命令(如 COPY

    我已经解决了很多数据库性能问题,只需编写简单的SQL代码,就可以替代不适合该任务的ORM。

        2
  •  5
  •   ipolevoy    9 年前

    免责声明:我是一个名为 ActiveJDBC 它与ActiveRecord共享一些设计目标,并正在积极开发中:

    http://javalite.io

        3
  •  4
  •   Cogito    12 年前

    Active Objects目前正在积极开发中,部分原因是Atlassian将其作为一个可能的插件数据持久化引擎,用于其企业软件套件。

    活动对象项目现在位于 http://java.net/projects/activeobjects/pages/Home

    使用活动对象的Atlassian插件在 https://studio.atlassian.com/browse/AO

    特别要注意的是,Atlassian刚刚开始构建活动对象库的文档,位于 https://developer.atlassian.com/display/AO/Active+Objects

    托管代码正在迁移到BitBucket,SCM正在从svn迁移到mercurial。关注bitbucket.org/activeobjects/了解这方面的进展。

        4
  •  1
  •   Andrew Swan    10 年前

    这里引用了ActiveObjects core中包含的why-other-orm.txt: ActiveObjects是从 地面应尽可能易于使用,最低限度为 配置。“。。。 支持某些功能(如分布式事务)的持久性框架 不要要求采取这种极端的措施。如果您的项目确实需要这样做 就这么简单。 ActiveObjects并不打算取代Hibernate。 相反,它的目标是成为一个更容易和更轻的选择,为许多人 不需要Hibernate所有强大功能的常见场景。 简而言之,ActiveObjects试图简化数据库开发 而且又很有趣。

    考虑像亚特兰西斯这样的公司使用JiRA中的AcvivObjor。

    存储库:

    https://maven2-repository.dev.java.net/

    使用以下依赖项:

      <dependency>
          <groupId>net.java.dev.activeobjects</groupId>
          <artifactId>activeobjects</artifactId>
          <version>0.8.2</version>
      </dependency>
    

    创建以下文件:

    Entity.java

        import net.java.ao.RawEntity;
        import net.java.ao.schema.AutoIncrement;
        import net.java.ao.schema.NotNull;
        import net.java.ao.schema.PrimaryKey;
    
        public interface Entity extends RawEntity<Integer>{
    
            @AutoIncrement
            @NotNull
            @PrimaryKey("id")
            Integer getExportId();
        }      
    

        import net.java.ao.Preload;
        import java.sql.Timestamp;
    
        @Preload
        public interface TestAO extends Entity {
    
            String getFirstName();
            void setFirstName(String firstName);
    
            String getLastName();
            void setLastName(String lastName);
    
            Timestamp getUpdateTimestamp();
            void setUpdateTimestamp(Timestamp updateTimestamp);
        }
    

    Test.java

        EntityManager entityManager = EntityManager("jdbc:mysql://localhost:3306/test","test","test");
        ao.migrate(TestAO.class);
        TestAO testAO = ao.create(TestAO.class);
    
        testAO.setFirstName("firstName");
        testAO.setLastName("lastName");
        testAO.save();