使用 JPA 时的标准工作流程

2024-01-09

我目前正在尝试与 JPA 合作。我情不自禁地觉得自己错过了一些东西或者以错误的方式做事。到目前为止,这似乎是被迫的。

我想到目前为止我所知道的是,有几种使用 JPA 的方法和支持这一点的工具。

  • 您可以使用注释在 Java 中完成所有操作,并让 JPA(无论您决定使用什么实现)创建您的模式并在发生更改时更新它。
  • 您可以使用工具对数据库进行逆向工程并为您生成实体类。当架构更新时,您必须重新生成这些类,或手动更新它们。

似乎两者都有缺点,也都有优点(就像所有事情一样)。我的问题是,在理想情况下,JPA 的标准工作流程是什么?大多数模式在维护阶段,特别是在开发阶段都需要更新,那么如何处理呢?


从带注释的实体生成数据库模式并不总是一个好方法。尽管理论上听起来不错,但实际上生成的模式通常不是最佳的,并且无法满足经验丰富的 DBA。

我在工作流程中遵循的方法是分别创建实体和数据库模式,同时仍然使用非常智能的工具来创建模式 - 或者类似液体碱 http://www.liquibase.org,即与数据库无关,支持修订、回滚等...或自定义烘焙迁移工具,仅运行高度优化的数据库特定 SQL 脚本。

这对您来说可能听起来不太理想,但我可以保证它可以完成工作并保持与模式相关的代码一致,因为正如 grigory 指出的那样 - 无论如何,并不是与数据库相关的所有内容都可以从实体生成。

但是,我可以从正在运行单元和集成测试的测试数据库的实体生成模式。假设您使用的是 PostgreSQL 生产环境,您可能会决定加快运行某些嵌入式内存数据库(例如 H2)的单元测试的速度,该数据库是在测试开始之前从实体创建的,并自动消失(因为它位于内存中) )测试完成执行后。这是一种非常常见的做法。

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

使用 JPA 时的标准工作流程 的相关文章

  • 在 Java 中将日期从 UTC 转换为 PST

    我需要将日期从 Google App Engine 本地服务器时区转换为 Java 中的太平洋时间 我尝试使用 Calendar calstart Calendar getInstance calstart setTimeZone Time
  • spring-data-neo4j 基本一对多关系不持久

    EDIT 示例项目可在github https github com troig neo4jCustomRepository 我在后端项目中使用 Neo4J Rest 图形数据库 托管在 grapheneDb 中 和 Spring Data
  • 如何在线程和小程序中使用双缓冲

    我有一个关于何时调用绘制和更新方法的问题 我有游戏小程序 我想在其中使用双缓冲 但我无法使用它 问题是 在我的游戏中 有一个球在 run 方法内移动 我想知道如何使用双缓冲来交换屏幕外图像和当前图像 请有人帮忙 当同时存在 update 和
  • 将 hyperjaxb3 升级到 jpa 2.1

    我正在尝试在使用 maven jpa hibernate 和 hyperjaxb 的 eclipse 项目中升级到 JPA 2 1 当我尝试执行以下操作时出现以下错误Run As Run on Server从日食内部 java lang N
  • 如何实现可运行队列

    我正在尝试实现一个可运行队列 在异步任务期间依次执行 意味着队列中的下一个将在另一个完成后执行 我编写了一个管理器来管理这些可运行对象和本身就是可运行对象的任务 然后 我获取异步任务中的第一个任务并运行它 希望它能够在队列中运行 但是它最终
  • 给定一个 IP 地址列表,如何找到最小值、最大值?

    在Java中 我有一个ip地址的数组列表 我如何找到最小值和最大值 我已经使用了 Collection min 但在以下情况下它不起作用 192 168 0 1 lt min 192 168 0 250 192 168 0 9 lt max
  • Android 上 WebRTC 的自定义视频源

    Overview 我想使用自定义视频源通过 WebRTC Android 实现来直播视频 如果我理解正确的话 现有的实现仅支持 Android 手机上的前置和后置摄像头 以下类与此场景相关 Camera1Enumerator java ht
  • json文件格式的升级路径

    我们将 Java 应用程序的用户首选项存储在 JSON 文件中 使用Jackson http jackson codehaus org 随着我们继续开发该应用程序 我们将添加首选项 重命名首选项并删除过时的首选项 当用户将应用程序升级到下一
  • 传输级别信息与 SOAP 消息命名空间 URI 不匹配

    我收到错误 Transport level information does not match with SOAP Message namespace URI 要求您提供详细信息以解决问题 我在客户端设置了以下内容 HttpTranspo
  • 版本差异? Java 中的正则表达式转义

    看来正则表达式转义在不同版本的 Java 中的工作方式不同 在 Java openjdk 16 0 1 中编译工作正常 在 Java openjdk 11 0 11 中抛出此编译错误 test java 15 error illegal e
  • 如何制作一个向用户显示图像而不是文本的下拉列表?

    ObjectChoiceField 字段满足我的所有要求 但它并不漂亮 这就是我所拥有的 String pets Dog Cat Duck ObjectChoiceField dd new ObjectChoiceField My Pet
  • 更改 WireMock __files 目录

    来自docs http wiremock org docs stubbing 要从文件中读取正文内容 请将文件放在 files 下 目录 默认情况下 这应该位于 src test resources 下 从 JUnit 规则运行时 当独立运
  • 无法为对象堆保留足够的空间

    每次尝试运行该程序时 我都会重复出现以下异常 VM初始化期间发生错误 无法为对象堆保留足够的空间 无法创建Java虚拟机 我尝试增加虚拟内存 页面大小 和 RAM 大小 但无济于事 我怎样才能消除这个错误 运行 JVM XX MaxHeap
  • 如何在 JUnit 中缩短(或隐藏)包名称?

    我在 JUnit 中有很长的包名称 这使得很难看到正在运行哪些测试 不幸的是 使用 Eclipse 的 缩写包名称 不起作用 有没有办法隐藏或者最好缩短它们 None
  • 为什么 writeObject 抛出 java.io.NotSerializedException 以及如何修复它?

    我有这个异常 我不明白为什么会抛出它 或者我应该如何处理它 try os writeObject element catch IOException e e printStackTrace Where element is a Transf
  • 告诉 JAXB 使用注释将 解组为 Date 类

    将 JAXB 与 Java First 一起使用时 类型的字段 属性java util Date编组和解编为xs dateTime一切都按预期进行 但是如果字段 属性的类型是Object JAXB 解组xs dateTimeto XMLGr
  • 如何使用 Java 1.4 和 SAX 将任意数据编码为 XML?

    我们使用 SAX 来解析 XML 因为它不需要将整个 XML 文档读入内存来解析单个值 我读过很多文章 坚持认为 SAX 只能用于解析 解码 XML 而不能创建它 这是真的 不 这不是真的 您可以使用类似于以下内容的方式将 XML 编码为
  • 与 System.in.read() 一起使用的文件结尾/流键盘组合是什么

    如果这个小问题已经得到解答 我深表歉意 我无法在SO找到它 使用以下 Java 简单代码从 IDE 控制台读取行 Windows 7 和 Eclipse Kepler int v try while v System in read 1 S
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了
  • Spring验证非空元素的字符串列表

    我有一个模型类 其中包含字符串列表 该列表可以为空 也可以包含元素 如果它有元素 这些元素不能为空 举个例子 假设我有一个名为 QuestionPaper 的类 它有一个 QuestionId 列表 其中每个都是一个字符串 class Qu

随机推荐

  • MongoDB 选择不同的和其中

    所以我正在做一个选择不同的工作 但我还想添加另一个键 data this gt db gt command array distinct gt scores key gt target user 我需要这样的东西 SELECT DISTIN
  • 使用 VSCode 调试 Electron 渲染器进程

    I tried 这个文件 https github com Microsoft vscode recipes tree master Electron 但是遇到了问题 我一张一张地浏览了指南 一切都很好 直到 1 将renderer js的
  • git:谁推入了 post-receive 挂钩

    如何确定谁推送到存储库 IE 有人这样做git push origin master并在 post receive 挂钩中originrepo 我需要使用某人的姓名或电子邮件 如果您使用 SSH 协议将更改推送到服务器 并且每个用户在服务器
  • 显示 UILabel 的文本

    继iOS 编程 大书呆子牧场指南 第六版的指南 我尝试使用 swift 制作一个测验项目 ViewController 代码在这里 import UIKit class ViewController UIViewController IBO
  • Java中的垃圾收集器是什么?

    我是 Java 新手 对 Java 中的垃圾收集器感到困惑 它实际上有什么作用以及何时发挥作用 请描述Java中垃圾收集器的一些属性 The 垃圾收集器 http en wikipedia org wiki Garbage collecti
  • 如何从 IDE 运行/调试 Streamlit 应用程序

    我真的很喜欢 Streamlit 作为研究环境 混合笔记本 仪表板式的输出 我可以使用纯代码快速设计其定义 无单元等 并且能够在运行时通过小部件影响我的代码 这是一个游戏规则改变者 为此 我正在寻找一种运行甚至调试 Streamlit 应用
  • 使用 LINQ 计算列表中给定对象的数量

    我有一个列表 其中可以包含同一对象的多次出现 现在我需要计算给定对象包含在该列表中的频率 int count 0 foreach IMyObject item in myList if item object2Count count 我确信
  • 如何修复致命错误:无效的标记压缩接近堆限制分配失败 - JavaScript 堆内存不足

    I got an error which is FATAL ERROR Ineffective mark compacts near heap limit Allocation failed JavaScript heap out of m
  • Hive 查询为匹配条件的行序列生成标识符

    假设我有以下配置单元表作为输入 我们称之为connections userid timestamp 1 1433258019 1 1433258020 2 1433258080 2 1433258083 2 1433258088 2 143
  • 已安装软件包,但出现找不到函数的错误 R [重复]

    这个问题在这里已经有答案了 可能的重复 错误 在 R 中找不到函数 https stackoverflow com questions 7027288 error could not find function in r 我正在尝试在 R
  • 如何创建 Kotlin 比较类型?

    刚刚学习定义 DateRange 类型 val wholeYear2017 Date 2017 1 1 Date 2017 12 31 所以我创建了如下类型 class DateRange
  • 删除特定用户代理的所有流量

    有没有办法排除所有属性和所有视图Google Analytics 的访问者特定用户代理 注意 这不是为了防止垃圾邮件 机器人 我已经检查过该功能管理 gt 查看设置 gt 机器人过滤 gt 排除来自已知机器人和蜘蛛的所有点击 就是去掉一部分
  • 从全局 Facebook ID 或用户名获取 Facebook 应用范围内的用户 ID

    如果您有 Facebook 例如 Zuckerbergs 用户 id 4 或用户名 zuck 您如何获取新的应用程序范围 idGraph v2 0使用应用程序的访问令牌 在文档中似乎找不到任何有关此内容的信息 这基本上是对相反问题的答案 从
  • TypeScript 1.3 受保护的错误

    最近在VS2013中安装了新的TS版本并尝试使用protected修饰符 然而 TS 验证器向我显示一个错误 并下划线protected带红线的词 我收到类似的错误 使用未来保留字 预期的 看起来它正在研究旧的 TS 定义 检查了项目文件
  • JSpec 不再受支持?

    来自 Ruby 社区 我正在寻找 Javascript Node js 的 BDD 测试框架 我是 JSpec 并且认为它是正确的选择 因为我在 Ruby 中使用了 RSpec 但在他们的 GitHub 页面上http github com
  • 是否可以在不显示原始数据的情况下内联管理?

    在 django 管理中 我有一个带有内联的模型 我希望能够仅显示内联的 添加新 行 而不显示属于内联的表中任何预先存在的原始数据 这可能吗 我尝试过每种组合max num and extra 并且它总是显示现有的表数据 Thanks 我认
  • D3 力定向图节点上的标签/文本

    我仍然不明白为什么下面的代码不显示其标签 文本 我已经定义了 css 并设置了当移动到节点上时的标题之类的属性 Json nodes name t1 group 1 name t2 group 1 name t3 group 1 name
  • 多行字符串文字的正则表达式会产生“StackOverflowError”

    我想匹配三元组中包含的字符串 可能包含换行符的引号 以及不包含任何换行符的引号 除了最开始和最后的子字符串 有效示例 foo bar baz blah 无效示例 foo bar baz 我尝试使用以下正则表达式 如 JavaString文字
  • Rcpp包DLL可以在不重新启动R的情况下卸载吗?

    在 Windows 上安装 Rcpp 软件包时 需要确保软件包 DLL 已卸载 否则在复制新 DLL 时会出现 权限被拒绝 错误 这意味着每次重新编译时都要重新启动 R 这非常烦人 有没有办法在不杀死R的情况下卸载包DLL 我已经尝试过de
  • 使用 JPA 时的标准工作流程

    我目前正在尝试与 JPA 合作 我情不自禁地觉得自己错过了一些东西或者以错误的方式做事 到目前为止 这似乎是被迫的 我想到目前为止我所知道的是 有几种使用 JPA 的方法和支持这一点的工具 您可以使用注释在 Java 中完成所有操作 并让