问题描述
|
我计划将PHP的形式转移到Java,以编写数据驱动的Web应用程序。我显然想要一个处理持久性数据的层。在带有Doctrine(1.x)的PHP中,可以通过单个接口(PHP的ArrayAccess)完成以下操作:
用代码表示数据结构
通过Doctrine从数据库获取结构化数据
以HTML形式表示结构化数据
因此,至关重要的是,我可以为以下表格提供一层:
$properties = array (
\"minlength\" => 2,\"maxlength\" => 30,);
new TextInput (\"name\",$properties);
...这对底层机制是无知的。它可以通过单个界面从所有源加载和保存(可能是结构化的)数据。
将数据保存到记录时,不能调用setName($value)
。它只能调用set(\"name\",$value)
。 (当然可以通过反思来完成,但是我希望我不必详细说明为什么这是一个坏主意)。
Java中是否有任何ORM:
实现本机集合接口。例如3ѭ。
将数据库关系映射为“ 4”之类的集合
具有正确的触发器来实现复杂的逻辑(例如权限或附加到字段的外部文件)。
解决方法
可以通过超类通过Hibernate的ClassMetadata接口实现“ 5”来实现POJO类的地图访问:
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\");
安全地获得9英镑是一个棘手的问题。
,您可能想看看Hibernate和JPA
,我认为NHibernate是不错的选择,但是我不确定我是否对触发器有所要求。我认为,这是一个应用程序层,而不是ORM层。