计算机编程的持久性是指将数据保存在应用程序存储器之外的能力。
Hibernate JoinColumn 引用的ColumnName
我有一个使用 ElementCollection 的实体。我在设置一切时遇到了麻烦,但找到了解决方案。现在我想了解为什么需要这样做。 这是我的实体 @实体 公开课
当按表单条件过滤数据时,用于分页数据的最佳 ASP.NET MVC 模式是什么? 这个问题类似于:Preserve data in .net mvc 但肯定有更好的答案吗? 当前...
我希望 Android 应用程序即使在恢复出厂设置后也能保留。我该怎么做?
我正在尝试让企业应用程序保留在Android设备(Android 12 root)上,即使在恢复出厂设置后也是如此。我该怎么做呢? 我曾尝试使用 syste 将应用程序制作为系统应用程序...
是否可以使用 SwiftData 拥有单个数据实体? (非数组,如持久应用程序设置)
我想要一个带有 SwiftData 的设置实体。我希望它存储用户上次使用该应用程序时正在使用的活动实体,以及我想要的一些其他设置...
使用 hibernate.enable_lazy_load_no_trans 解决 Hibernate Lazy-Init 问题
我一直遭受着臭名昭著的休眠异常 org.hibernate.LazyInitializationException:无法初始化代理 - 无会话 现在,社会各界一片欢呼 我一直遭受着臭名昭著的休眠异常 org.hibernate.LazyInitializationException: could not initialize proxy - no Session 现在,社区正在欢呼雀跃 <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 说它解决了问题,但谨慎使用。 谨慎使用是什么意思?这个属性实际上是做什么的? 请给我任何见解。 这种方法的问题是你可以产生N+1效果。 想象您有以下实体: public class Person{ @OneToMany // default to lazy private List<Order> orderList; } 如果您有一个返回 10K 人员的报告,并且在此报告中您执行代码 person.getOrderList(),JPA/Hibernate 将执行 10K 查询。这就是 N+1 效果,您将无法控制所有将要执行的查询。 现在想象一下 Order 如下所示: public class Order{ @OneToMany // default to lazy private List<EmailSent> emailSentList; } 现在想象一下,您对 person.getOrderList() 进行了一次迭代,并且对于每个 Order order,您将执行一次 order.getEmailSentList()。现在你能看出问题所在了吗? 对于 LazyInitializationException 你可以有一些解决方案: 使用 OpenInSessionInView 方法。您将需要创建一个将打开和关闭事务的 WebFilter。问题在于N+1效应。 使用 hibernate.enable_lazy_load_no_trans 配置,这是一个 hibernate,如果需要,您将无法将您的项目移植到其他 JPA 提供程序。还可以有N+1的效果 使用名为 PersistenceContext Extended 的 EJB 功能。这样,您将保持多个事务的上下文处于打开状态。问题是:可能会发生 N+1 效应,使用大量服务器内存(实体将保持托管状态) 在查询中使用 FETCH。通过这种方法,您可以执行如下 JPQL/HQL:select p from Person p join fetch p.orderList。通过此查询,您将从数据库加载列表,并且不会产生 N+1 效果。问题是您需要为每种情况编写 JPQL。 如果仍有任何问题,请检查以下链接: 第 1 部分 第 2 部分 这违背了我们利用 Hibernate 通过 Session 概念强制执行可重复读取语义的方式。 当首次加载对象时,如果在会话生命周期内再次引用该对象,则返回相同的对象,无论该对象在数据库中是否已更改。这就是hibernate自动提供的可重复读语义。 使用此设置,您将没有会话提供此保证,因此如果您现在访问此数据,您将获得最新版本的数据。 这可能没问题。但考虑一下这样的场景:该对象长时间保存在某个地方,并且数据发生了很大变化,因此延迟获取的数据与会话处于活动状态时已加载的数据有很大不同。这是你需要关心的。 简单来说,如果您的程序是 不受以下因素影响: 进入时已获取的数据有多陈旧 会话到将从会话中延迟获取的数据 但是,如果这是一个问题(你的程序面临计时问题,一次可能运行良好,另一次则失败)是一个问题,那么在会话中获取所有必要的数据。 解决 LazyInitializationException 的最佳方法是在实体查询中使用 JOIN FETCH 指令。 急切加载对性能不利。此外,还有一些反模式,例如: 在视图中打开会话 hibernate.enable_lazy_load_no_trans 您永远不应该使用它,因为它们要么需要打开数据库连接以进行 UI 渲染(在视图中打开会话),要么在初始持久性上下文之外获取的每个惰性关联都需要数据库连接(hibernate.enable_lazy_load_no_trans ). 有时,您甚至不需要实体,DTO 投影甚至更好。 可能是因为有更好的解决方案,例如@Transactional,其中打开和关闭会话遵循一种非常常见的模式:“打开会话然后将所有内容包装在 try-catch-finally 中;catch 回滚并最终关闭会话。”此注释通常位于 Web 应用程序和服务的请求级别。 或者,如果您需要更精细的控制,您可以使用 SessionFactory 手动打开会话。 正如其他人提到的,延迟加载是您需要注意的事情。这不是灵丹妙药,但非常有帮助。一般来说,如果您的应用程序设计为有许多小请求,那么就可以了。 预加载也可能非常糟糕。例如,当您的对象模型具有大量多对多关系,但您的请求不使用超过一层深度的数据时。 或者你可以暂时忘记整件事。使用延迟加载,直到它成为问题为止。如果确实如此,那么无论如何,使用 Mybatis 会更好。
当我在持久性 xml 中提供另一个端口 5432 时,连接到端口 1,527 上的服务器本地主机时出错
在Java EE中,我提供了persistence.xml并正确打包。 在 Java EE 中,我提供了 persistence.xml 并且已正确打包。 <?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="ArticleManagement"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>com.pauljabines.portfolio.Article</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres" /> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.user" value="postgres" /> <property name="javax.persistence.jdbc.password" value="************************" /> <property name="eclipselink.logging.level" value="ALL" /> </properties> </persistence-unit> </persistence> 问题:有了这些连接属性,为什么 glassfish 会抛出错误并说无法连接到端口 1527? 这是一些堆栈跟踪: org.glassfish.deployment.common.DeploymentException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.0.v20170811-d680af5): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: java.net.ConnectException : Error connecting to server localhost on port 1,527 with message Connection refused: connect. 解决方案是在glassfish中为postgresql创建一个jdbc连接池。为此: 在此处下载 postgresql jdbc 驱动程序并将其放置在 glassfish5\glassfish\domains\domain1\lib 中。 重新启动你的glassfish。 转到 glassfish 管理网页 localhost:4848。 转到 JDBC -> JDBC 连接池 单击“新建”以创建一个。 池名称 = 任何你想要的东西 资源类型 = javax.sql.ConnectionPoolDataSource 数据源类名 = org.postgresql.jdbc3.Jdbc3PoolingDataSource 对于属性,创建这些: 用户= postgres,你的用户 portNumber = 5432,数据库的端口号 密码 = 连接数据库的密码 databaseName = Portfolio, 要连接的数据库名称 服务器名称 = 本地主机,您的服务器名称 Ping 进行测试。 保存。 转到 JDBC -> 资源并编辑 jdbc/__default。 将池名称设置为您创建的池的池名称。 我今天也遇到了这个问题,我发现如果您使用@PersistenceUnit注释,应用程序会尝试连接到Glassfish服务器的内部JavaDB,我不知道为什么。因此,您可以进入 Glassfish 安装的 bin 目录并运行“asadmin start-database”以在端口 1527 启动 JavaDB。然后您的应用程序应该运行。但我认为这很令人困惑。所以我建议在没有 @PersistenceUnit 注释的情况下工作。使用“Persistence.createEntityManagerFactory()”创建 EntityManagerFactory。这无需启动 JavaDB 即可工作。
如何将 Java HttpSession 保存到 WebSphere 数据库或从 WebSphere 数据库检索 Java HttpSession
我们有一个标准的 J2EE/Struts 内部 Web 应用程序,已在生产中使用多年。 我们将许多 Java 对象保存到 HttpSession 中,然后在一个请求到另一个请求时检索它们。它
我想跟踪Python程序生命周期中某些数据结构(字典)发生的变化。我们可以通过拍摄快照或备份来实现这一点。备份...
使用 Docker 容器在 Hadoop-Spark 上进行持久化
无法使用hadoop和spark创建具有数据持久性的容器。每次关闭容器(docker-compose“down”)时,我都会丢失 hdfs 文件系统内的所有数据。 我试过了...
是否可以分离Hibernate实体,以便对对象的更改不会自动保存到数据库?
我有 Hibernate 实体,我必须将其转换为 JSON,并且我必须翻译实体中的一些值,但是当我翻译值时,这些值会立即保存到数据库中,但我不想...
我有一个显示所有联系人的页面。这只是只读页面,我所做的就是遍历某个组的所有联系人并显示它们: //不是延迟加载联系人,我不能使用...
是否可以在同一个着色器中拥有持久数据? 类似于制服,只不过着色器本身可以设置它。 我想做的是将一个顶点嵌入到我的顶点流中......
如何根据用户选择将 Zustand 存储从 sessionStorage 更改为 localStorage 或返回
我需要能够在运行时更改 Zustand 存储,这可能吗? 从“zustand”导入{创建} 从 'zustand/middleware' 导入 { persist, createJSONStorage } 导出常量 useBearStore =
如何使用GUDHI从binary-mask-png计算正确的持久图
我正在尝试从掩码中获取持久性图(用于分段),我的代码如下: 将 numpy 导入为 np 将 gudhi 导入为 gd 将 matplotlib.pyplot 导入为 plt 从 PIL.Image 导入操作...
我的应用程序有 3 个组件, 1)面向用户的组件,接收请求并将其存储到数据库中 2) 后端组件从数据库读取数据、处理数据并将其发送到分机...
在 3D 点云上使用 python Ripser 时出现致命错误
我正在尝试分析 3D CAD 模型 (STP/STL) 中的空隙和类似的封闭空间。对于这个任务,我一直在使用 Vedo 将 STL 转换为 3D 点云,并尝试运行 Ripser...
dokku 持久存储文件实际存储在主机上的哪里?文档说位置是 /var/lib/dokku/data/storage/ - 但该目录在我的 macos m 上甚至不存在...
在 Web 应用程序中引用 jpa persistence.xml 中的 jar 文件的正确路径是什么?
persistence.xml 如下所示: org.hibernate.ejb.HibernatePersistence persistence.xml 如下所示: <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <non-jta-data-source>jdbc/test</non-jta-data-source> <jar-file>../../lib/app-services-1.0.jar</jar-file> <exclude-unlisted-classes>false</exclude-unlisted-classes> </persistence-unit> 它是一个Web项目,所以部署单元是一个war文件。 我尝试引用的 jar 文件位于 WEB-INF/lib/ 文件夹中,persistence.xml 位于 WEB-INF/classes/META-INF 文件夹中。部署时,它只是告诉我 “警告:无法找到文件(忽略):文件:.../../lib/app-services-1.0.jar”。 我也尝试了我能想到的所有可能的路径,即../lib/app-services-1.0.jar,lib/app-services-1.0.jar. 执行此操作的正确途径是什么? 看看 jsr 总是有效的! 8.2.1.6.3 Jar 文件 可以使用 jar-file 元素代替或补充在 mapping-file 元素中指定的映射文件来指定一个或多个 JAR 文件。如果指定,将在这些 JAR 文件中搜索托管持久性类,并且将处理在它们上找到的任何映射元数据注释,或者将使用本规范定义的映射注释默认值来映射它们。 此类 JAR 文件是相对于包含持久性单元根的目录或 jar 文件指定的。 以下示例说明了如何使用 jar-file 元素来引用其他持久性类。这些示例使用的约定是,名称以“PUnit”结尾的 jar 文件包含 persistence.xml 文件,名称以“Entities”结尾的 jar 文件包含其他持久性类。 Example 1: app.ear lib/earEntities.jar earRootPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: <jar-file>lib/earEntities.jar</jar-file> Example 2: app.ear lib/earEntities.jar lib/earLibPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: <jar-file>earEntities.jar</jar-file> Example 3: app.ear lib/earEntities.jar ejbjar.jar (with META-INF/persistence.xml ) persistence.xml contains: <jar-file>lib/earEntities.jar</jar-file> Example 4: app.ear war1.war WEB-INF/lib/warEntities.jar WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: <jar-file>warEntities.jar</jar-file> Example 5: app.ear war2.war WEB-INF/lib/warEntities.jar WEB-INF/classes/META-INF/persistence.xml persistence.xml contains: <jar-file>lib/warEntities.jar</jar-file> Example 6: app.ear lib/earEntities.jar war2.war WEB-INF/classes/META-INF/persistence.xml persistence.xml contains: <jar-file>../../lib/earEntities.jar</jar-file> Example 7: app.ear lib/earEntities.jar war1.war WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml ) persistence.xml contains: <jar-file>../../../lib/earEntities.jar</jar-file> 如您所见,没有war文件的示例,上面示例中的所有war文件都在ear文件内! 但是我在war文件中进行了测试,只有当我指定jar文件的绝对路径时它才有效,这对于生产环境来说不是一个好方法! 以防万一其他人偶然发现这一点:jar-file-statement 才有效。当持久性单元作为企业档案 (.ear) 的一部分部署时 - 在所有其他情况 (.war) 中,persistence.xml 必须驻留在 /META-INF/ 中,并且不能引用存在于持久性单元之外的类(请参阅:http://javahowto.blogspot.com/2007/06/where-to-put-persistencexml-in-web-app.html)。因此,据我所知,没有办法让 WEB-INF/classes/META-INF 中的 persistence.xml 引用不在 WEB-INF/classes 中的类。 war2.war WEB-INF/lib/warEntities.jar WEB-INF/classes/META-INF/persistence.xml persistence.xml contains: <jar-file>lib/warEntities.jar</jar-file> 此格式适用于 war 文件。我使用 Wildlfy 8.2.0 和 JPA 2.1 不确定这与您部署为 WAR 的事实有关,但路径应该只是“app-sevices-1.0.jar”,并且 jar 应该位于 Java EE 应用程序的 lib 中。问题是:我不确定这是否适用于简化的“战争”Java EE 应用程序。我怀疑这仅适用于传统的 Java EE 部署文件(ear)。我将测试制作一个 EAR,其中包含用于 Web 应用程序的 WAR、用于 PU 的 JAR 以及用于应用程序服务的其他 JAR,就像传统的 Java EE 部署一样。 另外需要注意的是,不支持相对路径,并且并非所有供应商都支持在 SE 环境中使用相对路径。
我正在收集有关flush()方法的信息,但我不太清楚何时使用它以及如何正确使用它。从我读到的内容来看,我的理解是坚持的内容
我有一个持久库,应该将对象存储在数据库中。因此 var_export() 应该只存储类型、pk 和 db-version。相反,它应该从数据库中重新创建对象...