当前位置: 首页 > 知识库问答 >
问题:

Spring+Hibernate用DB中的值填充holder类

江嘉悦
2023-03-14

对于我的web应用程序,我将从静态DB表中加载一些细节,我计划在容器在单个bean中的HolderClass上启动时加载这些静态DB表。我将在任何希望使用静态数据的地方注入这个类。所以基本上我想避免每次从DB加载静态数据

当前执行情况:

public Class CountryHolder(){
    List<Country> allCountries;

    public void init(){
       this.countries = loadAllCountries;
    }

    public List<Country> loadAllCountries(){
     // Perform DB select query using JDBC template
    }

上面的实现工作得非常好,即init方法为bean加载国家列表。但是现在我已经迁移到了Hibernate,Country是一个持久实体。

Hibernate:

@Transactional(readOnly ="true")
public List<Country> loadAllCountries(){
   return countryDao.findAll();
}

请注意,我跳过了注入dao和jdbc模板的代码。但问题是,由于我是在init方法中调用这个方法,所以Hibernate抱怨没有找到会话,尽管我将它声明为只读事务。

请告知

共有1个答案

干浩阔
2023-03-14

首先,由于Spring本身并不执行持久性,所以它不能指定readOnly应该确切地意味着什么。该属性只是对提供者的提示,在本例中,行为取决于Hibernate。

如果将readOnly指定为true,则在当前Hibernate会话中,刷新模式将设置为flushmode.never以阻止会话提交事务。

此外,将在JDBC连接上调用setreadonly(true),这也是对底层数据库的提示。如果您的数据库支持它(很有可能支持它),那么这与flushmode的效果基本相同。从来没有,但是它更强,因为您甚至不能手动刷新。

如果您发布hibernate context会更有帮助?

已更新

您对使用applicationcontextdi的看法

我的想法是使用一个bean类,它将在spring容器加载时被加载,在这个bean类中,您将连接到DB获取记录,并在您想要使用的地方使用,而不必每次都去DB。

我在我的项目中就是这样做的,当服务器上下文加载并使用它时,我从DB获取一些菜单,而不是每次都往返于DB。

 类似资料:
  • 我有一个非常简单的spring boot应用程序,我正在尝试使用一些外部配置。我试着按照spring boot文件上的信息去做,但是我遇到了一个障碍。 当我运行下面的应用程序时,application.properties文件中的外部配置不会填充到bean中的变量中。我肯定我在做傻事,谢谢你的建议。 mybean.Java(位于/src/main//foo/bar/中) application.J

  • 我是Laravel的新手。当我试图从表中填充下拉列表时,我有一个“找不到变量”的问题:表名称是猫(类别),模型名称是“猫”,看起来像这样: 一个项目可以有一个类别。类别名称可以位于多个项目中。我现在想在表格中填充一个下拉列表,在其中插入一个新项目:为了实现这一点, 我走了一条路线: 我在我的HomeController中创建了一个函数,在那里我将(我确实这样认为)变量$cat传递给我的视图: 或其

  • 问题内容: 我接下来还有几粒豆: 我正在尝试执行下一个Hibernate查询: 问题: 我了解Hibernate正在寻找类似的东西: 代替: 关于如何在不创建新bean的情况下解决此问题的想法? 谢谢! 问题答案: 我写了一个ResultTransformer可以解决您的问题。它的名称是AliasToBeanNestedResultTransformer,请在github上查看。

  • 问题内容: 我是Java新手,我有一个像这样的文本文件 我想用此文本文件中的数据填充“ jTable”。下面是到目前为止我的代码不起作用。当我执行程序时,表上没有任何显示。 有人可以帮帮我吗? 问题答案: 您需要将其更改为以下内容。每次读取新行时,都需要重置矢量,否则它包含第一行+第二行+以此类推。您还可以调用以避免初始行为空。并且您只需要添加行,您的注释[单元格包含很多列]的问题是由于 使用而引

  • 本文向大家介绍在MySQL中用零填充列的值,包括了在MySQL中用零填充列的值的使用技巧和注意事项,需要的朋友参考一下 为此,请使用零填充的概念。它使用零填充字段的显示值,直到字段定义中设置的显示宽度 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出-

  • 我有一个熊猫数据框,它有超过4列。col1中的某些值缺失,我希望根据以下方法设置这些缺失的值: 尝试根据具有相同col2, col3, col4值的记录的col1值的平均值来设置它 如果没有这样的记录,则根据具有相同col2, col3值的记录的col1值的平均值来设置它 如果仍然没有这样的记录,则根据具有相同col2值的记录的col1值的平均值来设置它 如果以上都找不到,将其设置为col1中所有