我正在为现有的Java ORM(Ebean)开发Scala扩展。该项目的目标是为ORM添加尽可能多的类型安全性。 而不是
Ebean.find(Product.class).fetch("name", "unit").findList()
我最终希望能够写出类似
的内容(objects of entity[Product] with attributes name and unit) getIt
(请注意,这只是第一种DSL方法)。
ORM模型已定义为
@Entity
public class {
public String name;
public String unit;
}
为了在编译时为查询中的属性实现类型安全,我需要访问它们,例如像(new Product()).name
这样的虚拟对象。
我认为这是确保只使用该类上存在的模型成员的最佳方法,但是,在运行时,我需要一种方法来识别访问此变量。否则我只会调用该成员name
,并且在我的查询中不会知道这一点。
有人知道如何实现这一目标吗? 是否有可能跟踪访问变量的时间并在运行时将该信息提供给任何其他对象?
我已经考虑过连接到getter和setter而不是在模型类中使用公共成员,但这会使查询或模型非常难看。另一个问题是,必须为每个模型手动添加任何其他特定方法。
如果有人能提出可能的解决方案,我会很高兴。谢谢!