CDI 将服务注入 JPA 托管实体

2024-01-09

我确信这与这个问题 https://stackoverflow.com/q/8512628/206466但是关于这个问题的OP有一些我不确定对DI是否有意义的场景。所以这就是我的理解,尝试将 JPA 实体与 CDI Bean 混合通常不是一个好主意,因为两者通常都是通过创建代理对象来完成的。这是我的设想,但从我读到的内容来看,这是不可能的。

@Entity
public class MyUniqueObject implements Serializable {

    @Inject
    private transient Logger log;

    @Inject
    private transient Event<MyUniqueObjectEvent> events;

    @Id
    private long id;

    @NotNull
    private String text;

    public void setText( final String text ) {
       log.debug( "updating text {}", this );
       this.text = text;
       events.fire( new MyUniqueObjectEvent( this ) ); // consumed by an @Observes method
    }
}

什么是best做我想要完成的事情的方法?从根本上讲,这就是从 JPA 持久实体内部触发的事件、对日志对象的访问。代码示例很有帮助。


我想知道观察实体属性的每个更改是否真的有用,即使它们最终不会被持久化。所以你不认为实体监听器和回调 https://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/listeners.html这对您来说还不够吗?他们从 JPA 2.1 开始就支持 CDI,并提供大量您可以观察到的回调

  • @PrePersist
  • @预删除
  • @PostPersist
  • @PostRemove
  • @预更新
  • @更新后
  • @PostLoad

所以你会得到

@EntityListeners(class=Audit.class)
@Entity
public class MyUniqueObject implements Serializable {}


public class Audit {

    @Inject
    private Logger log;

    @Inject
    private Event<MyUniqueObjectEvent> events;

}

现在您可以观察实体的生命周期 - 而且最好将模型及其审核分开,您不必搞乱 setter 和 getter(这很令人困惑)来实现日志记录。另请注意,您还可以定义默认实体监听器 http://www.objectdb.com/java/jpa/persistence/event#Default_Entity_Listeners_对于您拥有的每个实体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CDI 将服务注入 JPA 托管实体 的相关文章

  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • 在 Eclipse 中跨文件搜索注释掉的代码

    有没有一种快速方法可以在 Eclipse 中查找 Java 文件中所有注释掉的代码 也许是搜索中的任何选项 或者任何可以执行此操作的附加组件 它应该只能找到被注释掉的代码 而不是普通的注释 在 Eclipse 中 我只是在打开正则表达式复选
  • Spring Rest POST Json RequestBody 不支持内容类型

    当我尝试使用 post 方法发布新对象时 RequestBody 无法识别 contentType Spring 已经配置完毕 POST 可以与其他对象一起使用 但不能与这个特定对象一起使用 org springframework web
  • 使用 Hibernate 或 Spring 打印 DBMS_OUTPUT.put_line

    我想知道 Hibernate 或 Spring 或任何第 3 方库是否提供将 DBMS OUTPUT put line 消息直接打印到 system out 或日志文件的能力 目的是在控制台中同时显示 PLSQL 日志消息和 java 日志
  • 使用 spring security 找不到 AuthenticationProvider

    我一直在尝试使用 x509 证书通过 LDAP 对用户进行身份验证 但似乎无法正常工作 我声明了一个身份验证提供程序 但仍然抛出错误 提示没有提供程序 这是我的调试输出 INFO Initiating Jersey application
  • 为什么Java HashMap的最大容量是1<<30而不是1<<31?

    Why is the maximum capacity of a Java HashMap 1 lt lt 30 and not 1 lt lt 31 even though the max value of an int is 231 1
  • 寻找 WebElements,最佳实践

    在我们当前的自动化 使用 Selenium WebDriver Java 中 我们使用 FindBy very广泛地 例如 FindBy css a name bcrumb protected List
  • 如何在JUnit测试中将MockWebServer端口设置为WebClient?

    我在用着spring boot with WebClient 它被自动装配为一个 bean 问题 写一个junit集成测试 我必须使用okhttpMockWebServer 该模拟始终在随机端口上启动 例如localhost 14321 N
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • AIX:IBM Java:java.net.SocketException:连接超时:可能是由于地址无效

    当尝试与我们的服务器建立 SSL 连接时 我们在 IBM AIX 上经常看到以下异常 java net SocketException Socket closed at com sun net ssl internal ssl SSLSoc
  • 创建一个 int 类型的随机数组。爪哇

    我需要创建一个随机的 int 数组 并按我自己的类对其进行排序 这是我制作数组的地方 public class MyProgram9 public static void main String args int list new int
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 捕获 XSS(跨站脚本)攻击的最佳正则表达式(Java 中)?

    杰夫实际上在净化 HTML http refactormycode com codes 333 sanitize html 但他的示例是用 C 编写的 而我实际上对 Java 版本更感兴趣 有人有更好的 Java 版本吗 他的示例是否足以直
  • 在同一台计算机上设置 JBoss 的多个实例

    我在 JBoss 社区中找到了下一页 http www jboss org community wiki ConfigurePorts http www jboss org community wiki ConfigurePorts 有下一
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • JTable中动态加载大量数据

    这是我的问题 我目前有一个 JTable 其中包含 5 000 到超过 200 000 行 你知道我要说什么了 数据已经加载到内存中了 这不是问题 但是如何 我可以创建一个高效的 JTable 以便它只加载以下行 是可见的 并且任何事件仅作
  • servlet 如何获取 servlet 之外的文件的绝对路径?

    我们一直在使用 System getProperties user dir 来获取属性文件的位置 现在它已经部署在 Tomcat 上 通过 servlet 系统调用将位置指定为 tomcat 而不是属性文件所在的位置 我们如何动态调用属性文
  • 使用 Tomcat 和 gradle 进行休眠

    免责声明 我是 Java 新手 我正在尝试使用 Tomcat 和 Gradle 设置 Hibernate 构建运行正确 但看起来像persistence xml文件未被读取 我的项目结构如下 build gradle src main ja
  • 生成签名和加密的 JWT

    我正在尝试使用生成签名和加密的 JWT 令牌雨云智威汤逊 http connect2id com products nimbus jose jwt private void generateToken throws JOSEExceptio

随机推荐

  • 当数据库日志记录信息应用于每个 Crystal Reports 部分时,应用程序运行缓慢

    目前 我使用以下方法将连接信息分配给所有报告部分 但由于报告中有很多部分 因此报告会在大约 10 秒后显示 这看起来真的很慢 当安装在客户端时 是否有其他方法可以一次性为每个 CR 设置登录信息 JFYI 所有 CR 使用相同的登录凭据连接
  • unique_ptr 具有需要原始指针的 API?

    使用托管内存和函数式语言大约 10 年之后 我终于回到了 C 智能指针让我感到困惑 一半的文档仍然是关于已弃用的auto ptr 我正在尝试实现这个相当简单的项目符号 你好世界 http bulletphysics org mediawik
  • 具有通配符类型参数的 Map 上的 flatMap

    我正在尝试写这样的东西 trait Typed T trait Test def testMap Map Typed Int def test testMap flatMap case typed size gt Seq fill size
  • 如何在Vuex中深度克隆状态并回滚?

    在 Vuex 中 我想拍摄树中对象属性的快照 克隆 修改它 然后可能回滚到以前的快照 背景 在应用程序中 用户可以在应用某些更改之前尝试它们 应用更改时 它们应该影响主 vuex 树 用户还可以单击 取消 放弃更改并返回到之前的状态 Exa
  • 相关查找字段外键在内联 Django 中不起作用

    我的 tabularinline 字段有问题 我有这样的模型 class Product models Model class Pemesanan models Model produks models ManyToManyField Pr
  • axios 在 componentDidMount 中获取数据后如何拍摄笑话快照?

    要测试的组件 class Carousel extends React Component state slides null componentDidMount gt axios get https s3 amazonaws com ra
  • 拖动数据点并提交值

    On page jqPlot http www jqplot com deploy dist examples customHighlighterCursorTrendline html有一个在 jqPlot 图表上拖动数据点的示例 我如何
  • Ajax v. 在 HTML 中包含数据

    我将 JavaScript 与 jQuery 结合使用 与 Django 后端对话 有一些 UI 需求需要 Ajax 因为在用户提供一些输入之前我们无法知道要发送哪些数据 然而 还有其他在模板时已知的数据 直接将该数据包含在模板中而不是使用
  • PHP ↔ Perl 接口或绑定

    您推荐哪种 PHP Perl 接口或绑定 我需要能够从 PHP 脚本运行位于 Perl 文件中的 Perl 函数并获取返回值 我已经找到了PECL perl 包 http pecl php net package perl但我不确定它的可靠
  • 64 位上 int 与 size_t

    将代码从 32 位移植到 64 位 很多地方都有 int len strlen pstr 这些现在都会生成警告 因为 strlen 返回 64 位的 size t 而 int 仍然是 32 位 所以我一直用它们替换 size t len s
  • 如何在提取文本之前识别可能损坏的 pdf 页面?

    TL DR 我的工作流程 下载PDF 使用将其拆分为页面pdftk https linux die net man 1 pdftk 使用提取每个页面的文本pdf转文本 https linux die net man 1 pdftotext
  • nginx 从rails 反向代理到wordpress

    我有一个 Ruby on Rails 应用程序和一个托管在不同 EC2 实例上的 Wordpress 博客 我正在尝试使 Wordpress 博客充当 Rails 应用程序的子文件夹 example com blog 而不是 blog ex
  • 在 Mac OS X 中链接动态库 (libjvm.dylib)(rpath 问题)

    我确实有一个需要链接的应用程序libjvm JDK 中的库需要进行 JNI 绑定 当我说出地点时libjvm dylib using L它成功编译和链接 但是 当我运行二进制文件时 我得到 dyld Library not loaded r
  • 如何在 Angular 中模拟 HTTP 请求?

    我检查了很多文章和答案 但似乎没有找到正确的方法来模拟HTTP Requests对于我的方法 我想测试我的frontend应用程序独立于backend 这是我拥有的方法类型 private getProfile this http get
  • 如何在每次启动时运行我自己的脚本

    我有一个问题 如何在 Ubuntu 中每次启动时运行自己的 bash 脚本 假设我有一个正在执行特定类型工作的脚本 现在我希望它在启动 Ubuntu 系统时自动运行 你应该学习如何使用暴发户 看this http upstart ubunt
  • 从 F# 中使用“params”调用泛型函数 (Observable.StartWith)

    Edit 请注意 正如 Daniel 和 latkin 在下面的回答和评论中指出的那样 这个问题涉及 F 中的一个错误 该错误似乎已于 2014 年初修复 我正在尝试为 Observable StartWith 编写一个咖喱包装器 我正在使
  • WordPress 中的 woocommerce 返回始终与产品类型一样简单

    我尝试获取分组产品的类型 但如果我使用 WC Product Factory woocommerce 返回空或始终 简单 当我使用时 the product new WC Product 2886 echo the product gt p
  • django send_mail() 函数需要几分钟

    我正在尝试在views py 文件中的函数中发送电子邮件 我已按照与此处相同的方式在我的设置文件中设置了电子邮件 Python Django Gmail SMTP 设置 https stackoverflow com questions 1
  • Java 1.5 命令行密码屏蔽

    All 我们的服务器正在运行 Java 1 5 我在尝试屏蔽来自命令行的用户输入时遇到了困难 我正在执行一个 jar 文件 java jar my jar 并通过 printlns 通过命令行提示符进行工作 我无法使用 Java 控制台 T
  • CDI 将服务注入 JPA 托管实体

    我确信这与这个问题 https stackoverflow com q 8512628 206466但是关于这个问题的OP有一些我不确定对DI是否有意义的场景 所以这就是我的理解 尝试将 JPA 实体与 CDI Bean 混合通常不是一个好