gpt4 book ai didi

java - Java 的 Doctrine-like 数组访问

转载 作者:行者123 更新时间:2023-11-30 07:33:43 26 4
gpt4 key购买 nike

我计划从 PHP 转向 Java 编写数据驱动的网络应用程序。我显然想要一个处理持久数据的层。在带有 Doctrine (1.x) 的 PHP 中,可以通过单个接口(interface)(PHP 的 ArrayAccess)完成以下操作:

  • 用代码表示数据结构
  • 通过 Doctrine 从数据库获取结构化数据
  • 以 HTML 形式表示结构化数据

因此,我必须为以下表单创建一个图层:

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

... 忽略了底层机制。它可以通过单个界面从上述所有来源加载和保存(可能是结构化的)数据。

当保存数据到记录时,它不能调用setName($value)。它只能调用 set("name", $value)。 (当然这可以通过反射(reflection)来完成,但我希望我不必详细说明为什么这是一个坏主意)。

那么 Java 中是否有任何 ORM:

  • 实现原生集合接口(interface)。 java.util.Map 例如。
  • 将数据库关系映射为集合,如 author.get("books").put(newBook)
  • 拥有正确的触发器来实现复杂的逻辑(例如权限或附加到字段的外部文件)。

最佳答案

通过 Hibernate 的 ClassMetadata 实现 Map 的父类(super class)可以实现对 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");

虽然安全获取 mySessionFactory 是一个棘手的问题;

关于java - Java 的 Doctrine-like 数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com