使用表数据在java中动态创建类

使用表数据在java中动态创建类,java,dynamic,collections,properties,Java,Dynamic,Collections,Properties,我有以下要求,, 我需要公开一个API,用户可以在其中发送一个自由形式的类似“查询”的表达式,并且我需要返回true/false。 例如:对于汽车对象,如果查询是 " (make = 'FORD' AND year IN (1990,1991)) OR type = 'SUV') ". 但是,“make”“year”或“type”来自外部填充的表 TABLE CAR_PROPERTIES ( propertyName VARCHAR2(40), propertyValue VARCHAR2

我有以下要求,, 我需要公开一个API,用户可以在其中发送一个自由形式的类似“查询”的表达式,并且我需要返回true/false。 例如:对于汽车对象,如果查询是

" (make = 'FORD' AND year IN (1990,1991)) OR type = 'SUV') ".
但是,“make”“year”或“type”来自外部填充的表

TABLE CAR_PROPERTIES (
 propertyName VARCHAR2(40),
 propertyValue VARCHAR2(10)
)
我首先遍历其他连接表来加载属性

因此,如果有一个新属性(和相应的值),我需要在查询中支持

到目前为止,我所做的就是:

  • 如果不需要向类添加动态属性,我知道 可以在我的收藏中使用类似于JoSQL的东西

  • 我研究了在应用程序开始使用Java工具API或javaassist时动态创建类

  • 客户端坚持使用不需要添加新属性和部署代码的解决方案(尽管此API的“调用者”确实需要更改代码才能在查询中使用新属性)


    我不喜欢动态创建新类。寻找任何指针或解决方案

    Raj-对您的设计只有很少的建议和灵感:

  • 甚至不会进行完整的O/R映射。我会考虑将您的领域特定语言翻译成SQL。我用Python做过这样的事情。这要容易得多,因为您正在两种简单语言(自定义DSL和SQL)之间进行语言到语言的转换。使用健壮的正则表达式,您可以拥有一个非常简洁和强大的框架来处理此类交互。(请参阅和其他模式)

  • 有一些有趣的设计需要研究:

    • ODataAPI允许用户使用RESTful“代数”查询数据,使用客户表达式OData4J句柄映射

    • QueryDSL:

    • SQLDSL:

  • 对于动态关系和属性表达式,我建议使用(嵌入式)图形数据结构 下面是一个有用的教程,展示了rel到图的映射:

    还有一个关于Neo4J的教程,我也将其用于类似目的:


  • 谢谢你的快速回复。我不想做任何ORM,我可以要求用户遵循查询的任何语法。我的主要问题是如何创建可以查询的java对象。具体来说,我有car类,但当应用程序启动时,它没有“make”、“year”作为属性。这些是我装的桌子上的,我明白了。不要试图在这里变得太花哨:-但是我会考虑一种类似于图的结构,也许是嵌入的NeN4J或者更简单的,在这里你可以在事实之后添加一些属性,有别名等等,并查询这些。也许太贵了,但也给了你灵活性:这里有一些与你所寻找的类似的例子: