如何在JPA2.1和JavaSE中在运行时指定EntityListener?

如何在JPA2.1和JavaSE中在运行时指定EntityListener?,java,jpa,jdbc,cdi,Java,Jpa,Jdbc,Cdi,我正在一个成熟的项目上做一些现代化的工作,使用一个不太友好的数据库。之前的工作是使用Java,但使用JDBC 我正在一个独立的程序上用JPA2.1(EclipseLink)测试水域。对于这个程序,我的显式DB需求非常简单,SE中的JPA也可以。我对JPA并不完全陌生,但之前的工作大多是玩具 a遇到了一个问题:我使用的实体有一个来自DB列的属性(通过命名本机查询),该属性必须以来自程序命令行的值/字符串作为前缀;在属性真正准备好使用之前 在“旧时代”,我可能只是在sql中创建了一个额外的列,或者在

我正在一个成熟的项目上做一些现代化的工作,使用一个不太友好的数据库。之前的工作是使用Java,但使用JDBC

我正在一个独立的程序上用JPA2.1(EclipseLink)测试水域。对于这个程序,我的显式DB需求非常简单,SE中的JPA也可以。我对JPA并不完全陌生,但之前的工作大多是玩具

a遇到了一个问题:我使用的实体有一个来自DB列的属性(通过命名本机查询),该属性必须以来自程序命令行的值/字符串作为前缀;在属性真正准备好使用之前

在“旧时代”,我可能只是在sql中创建了一个额外的列,或者在sql中创建了一个字符串cat,并在执行查询之前通过prepared语句的setString()api提供了值。我想我在JPA也能做到这一点;但似乎不是“JPA方式”(不管它是什么)

我想在那个专栏上使用AttributeConverter。但我无法真正弄清楚如何指定JPA将创建和使用的转换器实例使用的运行时数据

我考虑使用EntityListener和@PostLoad,并在PostLoad期间进行前缀设置。但是,我仍然不确定如何将运行时数据/前缀输入到JPA从查询加载数据时使用的侦听器实例中

我考虑遵循EntityListener路径,但使用CDI注入前缀,使用生产者和限定符。但是我是为SE而不是EE写的,我对将这个独立的应用程序作为CDI/SE java程序运行持怀疑态度

那么,如何使用来自JPA的声明性(基于注释的)转换器或EntityListener,但有一个钩子来初始化转换器或侦听器实例呢

或者有什么方法可以解决这个问题;在创建查询之前或在获取结果集之前;附加已初始化的属性转换器或实体侦听器

JPA2.1API 爪哇17
希望避免直接(在代码中)绑定到像eclipslink代码这样的库(仅使用JPA citerium

为什么不将前缀作为静态变量存储在程序中的某个位置,并通过静态变量在侦听器中使用该前缀?

我想我可以。但是,我试图不将实体侦听器耦合到任何CLI处理代码,或者实际上是程序的任何其他部分,除了实体Involed。或者至少限制耦合。我想这部分在我最初的SO问题中不清楚。我确实认为这会起作用。