我正在开发现有 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,而不是在模型类中使用公共成员,但这会使查询或模型变得非常难看。另一个问题是必须为每个模型手动添加任何额外的特定方法。
如果有人能提出可能的解决方案,我会很高兴。谢谢!