我计划将PHP格式转换为Java编写数据驱动的Web应用程序。我显然希望有一个处理持久数据的图层。在使用Doctrine(1.x)的PHP中,可以通过单个接口(PHP的ArrayAccess)完成以下操作:
因此,我必须拥有一个表格层,如:
$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)
答案 0 :(得分:2)
POJO classess的地图访问可以通过Hibernate的ClassMetadata界面实现Map
的超类来实现,如:
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 :(得分:1)
您可能需要查看Hibernate和JPA
答案 2 :(得分:1)
我认为NHibernate是选择,但我不确定我是否有关于触发器的要求。我认为,这是一个应用层,而不是ORM层。