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

在OpenUnderWriter中从Hibernate转储SQL查询

莘俊能
2023-03-14

我在SO和其他地方发现了许多类似的问题,比如这个,这个和这个,举几个例子。我试图跟踪它们,但无法在控制台上打印查询。一个问题是项目中有超过15个log4j.properties文件。我已经用相关的属性更新了所有这些,但到目前为止没有用。我是Hibernate的新手,对Liferay框架一无所知。如何在OpenUnderwriter中启用SQL调试?

编辑:通过从bitbucket存储库克隆openunderwriter,并按照安装说明在Eclipse中打开它,我已经安装了openunderwriter。它使用Ant构建。我可以使用Eclipse中的Ant命令成功地启动/停止/构建它,并从浏览器中使用该应用程序。在存储库中找不到[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1目录。不过,我确实发现

[OpenUnderWriterHome]\system\target\liferay-portal-6.2-ce-ga6\

目录。我对以下目录中的log4j.properties文件进行了更改,假设*g1和'*g6'表示版本差异

D:\OpenUnderWriter\OpenUnderWriterRepo\system\target\liferay-portal-6.2-ce-ga6\jboss-7.1.1\standalone\deployments\ROOT.war\WEB-INF\classes
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type=trace
log4j.logger.org.hibernate.jdbc=DEBUG
log4j.logger.org.hibernate.transaction=DEBUG

编辑2:
我有两个HibernateConfiguration.xml文件。第一个位于d:\openunderwriter\openunderwriterrepo\system\target\test\integration-test.jar\com\ail\core\persistence\hibernate,第二个位于d:\openunderwriter\openunderwriterrepo\system\modules\com\ail\core\persistence\hibernate。这两个文件的内容分别如下

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration>

    <session-factory>

        <property name="org.hibernate.envers.track_entities_changed_in_revision">true</property>
        <property name="org.hibernate.envers.audit_table_suffix">_</property>

        <!-- Database connection settings --> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
        <property name="connection.url">jdbc:mysql://@dbhost@:3306/@dbname.openunderwriter@</property> 
        <property name="connection.username">@dbusername@</property> 
        <property name="connection.password">@dbpassword@</property> 
        <property name="connection.pool_size">1</property> 

        <!-- Enable Hibernate's automatic session context management --> 
        <property name="current_session_context_class">thread</property> 

        <!-- SQL dialect --> 
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

        <property name="hibernate.bytecode.use_reflection_optimizer">true</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="use_sql_comments">true</property>
        <property name="hibernate.hbm2ddl.auto">create</property>

        <!-- Mappings for all classes come from one place -->
        <mapping class="com.ail.core.Attribute" />
        <mapping class="com.ail.core.ForeignSystemReference" />
        <mapping class="com.ail.core.Note" />
        <mapping class="com.ail.core.Reference" />
        <mapping class="com.ail.core.PageVisit" />
        <mapping class="com.ail.core.Type" />
        <mapping class="com.ail.core.Version" />
        <mapping class="com.ail.core.audit.envers.Revision" /> 
        <mapping class="com.ail.core.document.Document" /> 
        <mapping class="com.ail.core.document.DocumentContent" /> 
        <mapping class="com.ail.core.document.DocumentPlaceholder" /> 
        <mapping class="com.ail.core.document.DocumentRequest" /> 
        <mapping class="com.ail.core.key.UniqueKey" /> 
        <mapping class="com.ail.core.logging.ServiceRequestRecord" />
        <mapping class="com.ail.core.product.ProductChangeEvent" />
        <mapping class="com.ail.core.product.ProductUpgradeLog" />
        <mapping class="com.ail.financial.CurrencyAmount" />
        <mapping class="com.ail.financial.DirectDebit" />
        <mapping class="com.ail.financial.Eway" />
        <mapping class="com.ail.financial.IWinPay" />
        <mapping class="com.ail.financial.MoneyProvision" />
        <mapping class="com.ail.financial.Orange" />
        <mapping class="com.ail.financial.PaymentCard" />
        <mapping class="com.ail.financial.PaymentHoliday" /> 
        <mapping class="com.ail.financial.PaymentMethod" />
        <mapping class="com.ail.financial.PaymentRecord" />
        <mapping class="com.ail.financial.PaymentSchedule" />
        <mapping class="com.ail.financial.PayPal" />
        <mapping class="com.ail.financial.SagePay" />
        <mapping class="com.ail.financial.Stripe" />
        <mapping class="com.ail.financial.ledger.Account" />
        <mapping class="com.ail.financial.ledger.AccountingPeriod" />
        <mapping class="com.ail.financial.ledger.Balance" />
        <mapping class="com.ail.financial.ledger.Journal" />
        <mapping class="com.ail.financial.ledger.JournalLine" />
        <mapping class="com.ail.financial.ledger.Ledger" />
        <mapping class="com.ail.insurance.claim.Claim" /> 
        <mapping class="com.ail.insurance.claim.ClaimRecovery" /> 
        <mapping class="com.ail.insurance.claim.ClaimSection" /> 
        <mapping class="com.ail.insurance.policy.AssessmentSheet" /> 
        <mapping class="com.ail.insurance.policy.Asset" /> 
        <mapping class="com.ail.insurance.policy.Broker" /> 
        <mapping class="com.ail.insurance.policy.Clause" /> 
        <mapping class="com.ail.insurance.policy.CommercialProposer" /> 
        <mapping class="com.ail.insurance.policy.Coverage" /> 
        <mapping class="com.ail.insurance.policy.PersonalProposer" /> 
        <mapping class="com.ail.insurance.policy.Policy" /> 
        <mapping class="com.ail.insurance.policy.Section" /> 
        <mapping class="com.ail.party.Address" /> 
        <mapping class="com.ail.party.ContactSystem" /> 
        <mapping class="com.ail.party.EmailAddress" /> 
        <mapping class="com.ail.party.Party" /> 
        <mapping class="com.ail.party.PartyRelationship" /> 
        <mapping class="com.ail.party.PartyRole" /> 
        <mapping class="com.ail.party.Person" /> 
        <mapping class="com.ail.party.PhoneNumber" /> 
        <mapping class="com.ail.party.Organisation" />
        <mapping class="com.ail.util.DateOfBirth" /> 

    </session-factory>

</hibernate-configuration> 

第二个hibernateConfiguration.xml

    <?xml version='1.0' encoding='utf-8'?> 
    <!DOCTYPE hibernate-configuration PUBLIC 
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

    <hibernate-configuration>

        <session-factory>

            <property name="org.hibernate.envers.track_entities_changed_in_revision">true</property>
            <property name="org.hibernate.envers.audit_table_suffix">_</property>

            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">jta</property>
            <property name="hibernate.current_session_context_class">jta</property>

            <property name="jta.UserTransaction">java:jboss/UserTransaction</property>

            <property name="hibernate.connection.datasource">java:/PersistenceDS</property>

            <property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>

            <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>

            <property 

name="hibernate.transaction.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform</property>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hibernate.bytecode.use_reflection_optimizer">true</property>
        <property name="hibernate.connection.isolation">2</property> <!-- read committed -->
        <property name="hibernate.generate_statistics">false</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="use_sql_comments">true</property>
        <property name="hibernate.hbm2ddl.auto">validate</property>

        <mapping class="com.ail.core.ForeignSystemReference" />
        <mapping class="com.ail.core.Note" />
        <mapping class="com.ail.core.Reference" />
        <mapping class="com.ail.core.Type" />
        <mapping class="com.ail.core.audit.envers.Revision" /> 
        <mapping class="com.ail.core.document.Document" /> 
        <mapping class="com.ail.core.document.DocumentContent" /> 
        <mapping class="com.ail.core.document.DocumentPlaceholder" /> 
        <mapping class="com.ail.core.document.DocumentRequest" /> 
        <mapping class="com.ail.core.key.UniqueKey" /> 
        <mapping class="com.ail.core.logging.ServiceRequestRecord" />
        <mapping class="com.ail.core.product.ProductChangeEvent" />
        <mapping class="com.ail.core.product.ProductUpgradeLog" />
        <mapping class="com.ail.financial.CurrencyAmount" />
        <mapping class="com.ail.financial.DirectDebit" />
        <mapping class="com.ail.financial.Eway" />
        <mapping class="com.ail.financial.IWinPay" />
        <mapping class="com.ail.financial.MoneyProvision" />
        <mapping class="com.ail.financial.Orange" />
        <mapping class="com.ail.financial.PaymentCard" />
        <mapping class="com.ail.financial.PaymentHoliday" /> 
        <mapping class="com.ail.financial.PaymentMethod" />
        <mapping class="com.ail.financial.PaymentRecord" />
        <mapping class="com.ail.financial.PaymentSchedule" />
        <mapping class="com.ail.financial.PayPal" />
        <mapping class="com.ail.financial.SagePay" />
        <mapping class="com.ail.financial.Stripe" />
        <mapping class="com.ail.financial.ledger.Account" />
        <mapping class="com.ail.financial.ledger.AccountingPeriod" />
        <mapping class="com.ail.financial.ledger.Balance" />
        <mapping class="com.ail.financial.ledger.Journal" />
        <mapping class="com.ail.financial.ledger.JournalLine" />
        <mapping class="com.ail.financial.ledger.Ledger" />
        <mapping class="com.ail.insurance.claim.Claim" /> 
        <mapping class="com.ail.insurance.claim.ClaimRecovery" /> 
        <mapping class="com.ail.insurance.claim.ClaimSection" /> 
        <mapping class="com.ail.insurance.policy.AssessmentSheet" /> 
        <mapping class="com.ail.insurance.policy.Asset" /> 
        <mapping class="com.ail.insurance.policy.Broker" /> 
        <mapping class="com.ail.insurance.policy.Clause" /> 
        <mapping class="com.ail.insurance.policy.CommercialProposer" /> 
        <mapping class="com.ail.insurance.policy.Coverage" /> 
        <mapping class="com.ail.insurance.policy.PersonalProposer" /> 
        <mapping class="com.ail.insurance.policy.Policy" /> 
        <mapping class="com.ail.insurance.policy.Section" /> 
        <mapping class="com.ail.party.Address" /> 
        <mapping class="com.ail.party.ContactSystem" /> 
        <mapping class="com.ail.party.EmailAddress" /> 
        <mapping class="com.ail.party.PartyRelationship" /> 
        <mapping class="com.ail.party.PartyRole" /> 
        <mapping class="com.ail.party.Party" /> 
        <mapping class="com.ail.party.Person" /> 
        <mapping class="com.ail.party.PhoneNumber" /> 
        <mapping class="com.ail.party.Organisation" />
        <mapping class="com.ail.util.DateOfBirth" /> 
    </session-factory>

</hibernate-configuration> 

同样在d:\openunderwriter\openunderwriterrepo\system\target\liferay-portal-6.2-ce-ga6目录中,我没有portal.properties文件。其中仅有的道具文件是portal-ext.propertiesportal-setup-wizard.propertiesportal-ext.properties的内容如下

index.on.startup=true
javascript.fast.load=false
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.password=password
jdbc.default.url=jdbc:mysql://localhost/OU_trunk_trunk_Liferay?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=openquote
layout.user.private.layouts.auto.create=false
layout.user.private.layouts.enabled=false
layout.user.public.layouts.auto.create=false
layout.user.public.layouts.enabled=false
theme.portlet.decorate.default=false
velocity.engine.restricted.classes=
velocity.engine.restricted.variables=
web.server.https.port=8443
users.screen.name.allow.numeric=true
company.default.home.url=/web/ou/welcome

portal-setup-wizard.properties的内容如下

admin.email.from.name=Adam OpenUnderwriter
liferay.home=../..
admin.email.from.address=adam@openunderwriter.org
setup.wizard.enabled=false

共有1个答案

朱阳曜
2023-03-14

TL;DR摘要在此帖子的底部

Liferay是一个开源的基于Java的门户平台。Liferay是一个门户,具有强大的用户帐户管理系统(角色、组、权限等)、内容管理功能、可扩展的文档存储,最重要的是,它是一个用于开发自定义应用程序和扩展Liferay门户本身的优秀SDK。

开放保险公司似乎使用救生筏6.2作为其下划线门户。本质上,Open Ensurewrites应用程序只是扩展Liferay门户以适应特定的业务领域,但下划线结构只是门户的扩展,而不是真正的完全独立的产品。Liferay支持大多数主要的应用程序服务器/servlet容器,而且Open Unerwriter似乎使用JBoss作为它的应用程序服务器。

您可以在以下位置找到这些插件

[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments

更改Liferay portal的配置(例如以特定的方式记录查询)不是通过直接修改这些文件来完成的(除非它是您自己构建的插件)。

Liferay具有用于配置和扩展门户及相关技术的扩展点。在较高的级别上,您可以扩展或更改以下四个组件之一的配置

    null
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments/{portlet-name}/WEB-INF/service.xml
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments/{portlet-name}/WEB-INF/sql/

要正确记录hibernate查询,您应该修改以下文件

[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/portal-ext.properties

您应该将以下属性追加到底部

hibernate.show_sql=true

如果该文件已经存在,只需将值从false更改为true(默认为false)。

insert into table1 (column1, column2) values (?, ?)
[OPEN_UNDERWRITER_HOME]/liferay-portal-6.2.0-ce-ga1/jboss-7.1.1/standalone/deployments/ROOT/WEB-INF/classes/log4j.properties
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.type=trace
log4j.logger.org.hibernate.jdbc=DEBUG
log4j.logger.org.hibernate.transaction=DEBUG

如果您正在解决性能问题,您可能还希望添加以下内容来跟踪hibernate会话

log4j.logger.org.hibernate.impl.SessionImpl=TRACE

portal.properties是包含门户配置的属性文件。您从不直接修改它,而是修改portal-ext.properties。但是,您可能会(也可能不会)注意到同一目录中的其他四个属性文件

  1. portal-bundle.properties
  2. portal-ext.properties
  3. portal-setup-wizard.properties
  4. portal-ide.properties

您可能已经注意到,在platforms主目录下有几个不同的*/log目录。在您第一次启动服务器后,您应该在这里看到一个日志文件夹

[OPEN_UNDERWRITE_HOME]/liferay-portal-6.2.0-ce-ga1/logs

这些是您最感兴趣的日志文件。JBoss目录下的日志文件夹是app servers日志文件。它可能包含有用的信息,但不会包含您正在查找的查询。

我不知道您为什么要查看hibernate查询,但我认为这是出于性能方面的原因。首先,在生产中不要打开这个。它会让你的机器慢下来。其次,您可能需要考虑打开MySQL查询日志。

general_log_file = /var/logs/mysql.log
general_log = 1

如果您认为性能问题与数据库有关,那么您关心的属性介于以下两个子节之间

  1. https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html#model%20hints
  2. https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html#SQL%20data

MySQL查询执行计划

 类似资料:
  • 我有一个sql查询: 这就产生了: Hibernate:选择this_.pName为y0_,this_.kNum为y1_,count(distinct this_.agentg)为y2_from Test_CPView this_where(低(this_.pName+“~”+this_.kNum)like?或低(this_.pName+“~”+this_.kNum)like?或低(this_.p

  • 问题内容: 我有一个本机SQL查询,如下所示: 问题是,Hibernate的解释,,作为参数,并希望我们给值,, 但是我不想让Hibernate这样解释,所以我想逃避冒号。 怎么做 ? 问题答案: 在Hibernate中,转义以开头。但是在Java中,您还必须逃脱另一个。因此,所有内容都需要替换为。最后,您得到:

  • 问题内容: 我正在使用CodeIgniter将一些数据插入MySQL表中。因为我正在使用并且不想编辑活动记录类以启用此功能,所以我正在手动生成SQL查询。 问题: 当字符串中包含单引号时,查询失败。如何使这些需要转义的字符自动转义,例如使用活动记录时? 问题答案: 另一种方法是使用查询绑定,该绑定会自动转义所有值:

  • 问题内容: 查询中给出的(下划线)不适用。 范例: 这匹配并带来许多行,除了包含 可能有人请帮助如何在实现这一目标以及在?谢谢。 问题答案: 您是否尝试过转义: 而不只是。

  • 问题内容: 我需要从Hibernate查询中获取字符串,并稍后进行处理(因此无法使用来解决)。 我已经看过如何从HibernateCriteriaAPI(并非用于记录日志)中获取SQL,但是有了这种解决方法,我得到了SQL查询字符串,但是没有显示它显示’?’的参数值,有没有办法获得带有参数值的完整SQL字符串? 我的意思是,有了这种解决方案,我可以得到,但我需要得到… 有想法吗? 问题答案: 有一

  • 我需要将这个sql查询转换为hibernate条件,请大家帮忙。 按名称顺序按应用描述限制3从设备组中选择名称,计数(*)为应用