Doctrine-подобный доступ к массиву для Java - PullRequest
2 голосов
/ 14 апреля 2011

Я планирую перейти с PHP на Java, создавая управляемые данными веб-приложения. Я, очевидно, хочу, чтобы слой обрабатывал постоянные данные. В PHP с Doctrine (1.x) через один интерфейс можно выполнить следующие действия (PHP ArrayAccess):

  • Представление структур данных в коде
  • Получение структурированных данных из базы данных через доктрину
  • Представление структурированных данных в форме HTML

Поэтому очень важно, чтобы у меня был слой для таких форм, как:

$properties = array (
    "minlength" => 2,
    "maxlength" => 30,
);
new TextInput ("name", $properties);

... который не обращает внимания на основную механику. Он может загружать и сохранять (возможно структурированные) данные из всех вышеперечисленных источников через один интерфейс.

При сохранении данных в записи он не может вызвать setName($value). Можно только позвонить set("name", $value). (Конечно, это можно сделать с помощью размышлений, но я надеюсь, что мне не нужно уточнять, почему это плохая идея).

Так есть ли в Java ORM, который:

  • Реализует собственные интерфейсы коллекции. java.util.Map например.
  • Отображает отношения БД в виде коллекций, таких как author.get("books").put(newBook)
  • Имеет правильные триггеры для реализации сложной логики (например, разрешения или внешние файлы, прикрепленные к полям).

Ответы [ 3 ]

2 голосов
/ 15 апреля 2011

Доступ к карте для POJO-класса можно получить с помощью суперкласса, реализующего Map через ClassMetadata интерфейса Hibernate, например:

abstract class MappedRecord implements java.util.Map<String, Object> {

    private ClassMetadata classMeta;

    public MappedRecord() {
        classMeta = mySessionFactory.getClassMetadata(this.getClass());
    }

    public Object put(String s, Object o) {
        classMeta.setPropertyValue(this, s, o, EntityMode.POJO);
    }
}

Затем, когда вы расширяете MappedRecord в ваших постоянных классах, вы можете позвонить:

User u = new User();
u.put("name", "John");

Безопасное получение mySessionFactory это сложный вопрос;

1 голос
/ 14 апреля 2011

Я думаю, NHibernate - это выбор, но я не уверен, что получил ваше требование о триггерах. Я думаю, это немного прикладной уровень, а не слой ORM.

1 голос
/ 14 апреля 2011

Возможно, вы захотите взглянуть на Hibernate и JPA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...