我在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.properties
和portal-setup-wizard.properties
。portal-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
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具有用于配置和扩展门户及相关技术的扩展点。在较高的级别上,您可以扩展或更改以下四个组件之一的配置
[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。但是,您可能会(也可能不会)注意到同一目录中的其他四个属性文件
您可能已经注意到,在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
如果您认为性能问题与数据库有关,那么您关心的属性介于以下两个子节之间
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从设备组中选择名称,计数(*)为应用