相关疑难解决方法(0)

无法使hibernate停止使用Spring JPA Vendor Adapter显示SQL

Hibernate继续向stdout发送SQL跟踪,当隐藏在JPA适配器后面时,我无法弄清楚如何更改Hibernate配置属性.这是entityManagerFactory的Spring bean:

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="ssapDataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" >
            <property name="showSql" value="false"/>
        </bean>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

即使将showSql属性设置为false,Hibernate也会继续打印SQL.

我已经尝试使用"hibernate.show_sql = false"在我的类路径中创建一个hibernate.properties文件,但它也没有选择它.

spring hibernate jpa

15
推荐指数
2
解决办法
2万
查看次数

JPA:如何在设置参数后获取/打印(类型化)查询后面的JPQL查询字符串?

你如何/打印一个(类型)查询背后的JPQL查询字符串,即经过参数设置?(例如用于调试目的)

一个简单toString()似乎没有做的伎俩......

谢谢

java debugging jpa jpql

6
推荐指数
1
解决办法
8343
查看次数

hibernate logback sql

我想在使用Hibernate时看到我的SQL查询的实际参数.我将其添加到我的logback.xml中以查看查询(带有问号):

<logger name="org.hibernate.type" level="TRACE" />
Run Code Online (Sandbox Code Playgroud)

但没有效果.

是否需要特殊配置?

OnConsoleStatusListener向我显示正确的配置

23:48:15,246 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.type] to TRACE
Run Code Online (Sandbox Code Playgroud)

但没有来自org.hibernate.type包的输出.

我正在使用Spring和Jpa.

spring hibernate logback spring-data

6
推荐指数
1
解决办法
7037
查看次数

如何调试JPA CriteriaBuilder查询

如何调试使用JPA 2.0 CriteriaBuilder?构建的查询?有没有办法打印出正在执行的查询?

我使用的开发Web应用程序NetBeans,MySql,GlassFish.我会避免在调试模式下启动MySql,因为它也用于其他应用程序.JPA提供商是EclipseLink.

java mysql jpa eclipselink criteria-api

5
推荐指数
1
解决办法
8905
查看次数

防止发生hibernate StaleObjectStateException

我有一个Spring控制器方法的问题.它实际上对导致StaleObjectStateException的同一实体进行了两次更新.

问题是,当我检索Member实例时,我认为它会以某种方式导致更新(请参阅//UPDATE ONE)Advertisement实例(实际上并不需要),当我更新Advertisement实例(请参阅参考资料//UPDATE TWO)时,它会抛出StaleObjectStateException.

我的问题是如何防止在我的情况下发生此异常(请记住我使用Spring Data JPA)?

这是Member实体类:

@Entity
public class Member {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
private List<Advertisement> advertisements;
...
Run Code Online (Sandbox Code Playgroud)

并在Advertisement实体类中:

@NotNull
@ManyToOne(fetch = FetchType.LAZY)
private Member member;
Run Code Online (Sandbox Code Playgroud)

这是控制器方法:

@RequestMapping(value = "/family/advertisement/edit", method = RequestMethod.POST, produces = "text/html")
    public String editFamilyAdvertisement(@ModelAttribute @Validated(value = Validation.AdvertisementCreation.class) FamilyAdvertisementInfo familyAdvertisementInfo,           BindingResult bindingResult, Model model) {
        Member member = memberService.retrieveCurrentMember();//UPDATE ONE
        if (!advertisementService.advertisementBelongsToMember(familyAdvertisementInfo.getFamilyAdvertisement(), member)) {
            throw new IllegalStateException("advertisement …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa spring-data-jpa

5
推荐指数
1
解决办法
1万
查看次数

JPA Criteria Disjunction

我试图学习和理解JPA标准.到目前为止,我在SQL方面非常有能力,并且在Hibernate Criteria和HQL方面非常有能力.

我试图用一个OR语句做一个相当简单的选择.

在纯SQL中,我的选择如下所示:

SELECT * FROM CHANGED_LOG
WHERE key1 = 52540 AND objectCode = 'Order'
OR key1 = 48398 AND objectCode = 'Package'
Run Code Online (Sandbox Code Playgroud)

这给了我每一行key1 = 52540和objectCode等于Order AND的每一行key = 48398和objectCode等于Package.这正是我想要的.

所以尝试用JPA标准(这看起来格外复杂......),我到目前为止最好的猜测是:

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();

    CriteriaQuery<ChangedLogBean> query = builder.createQuery(ChangedLogBean.class);
    Root<ChangedLogBean> from = query.from(ChangedLogBean.class);
    CriteriaQuery<ChangedLogBean> select = query.select(from);

    Predicate orderChangedLogBeans = builder.conjunction();
    builder.and(orderChangedLogBeans, builder.equal(from.get("key1"), orderId));
    builder.and(orderChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.OrderBean));

    Predicate packageChangedLogBeans = builder.conjunction();
    builder.and(packageChangedLogBeans, builder.equal(from.get("key1"), packageId));
    builder.and(packageChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.PackageBean));

    Predicate orderOrPackage = builder.disjunction();
    orderOrPackage.getExpressions().add(orderChangedLogBeans);
    orderOrPackage.getExpressions().add(packageChangedLogBeans);

    query.where(orderOrPackage);

    return entityManager.createQuery(select).getResultList();
Run Code Online (Sandbox Code Playgroud)

哇.一个简单查询的很多行...但是,这仍然从数据库向我的每一行返回.

我在这做错了什么?

谢谢你所有有用的答案:)

hibernate jpa criteria criteria-api

3
推荐指数
1
解决办法
5441
查看次数

存储库-在本机查询中按订单排序不起作用

我有一个spring数据JPA存储库(位于postgres db上),我有时需要使用nativeQuery = true选项来使用本机查询。

但是,在当前情况下,我需要传递一个order字段,并且这样做是这样的:

电话..

targetStatusHistoryRepository.findSirenAlarmTimeActivation([uuid,uuid2],"activation_name DESC", 0, 10)
Run Code Online (Sandbox Code Playgroud)

..回购方法

@Query(
        nativeQuery = true,
        value = """select
                     a.name as activation_name,
                     min(transition_from_active_in_millis),
                     max(transition_from_active_in_millis),
                     avg(transition_from_active_in_millis) from target_status_history t, activation_scenario a
                     where t.activation_uuid=a.activation_scenario_id and t.transition_from_active_in_millis > 0 and t.activation_uuid in (:activationUUIDs) group by a.name,t.activation_uuid
                     order by :orderClause offset :offset limit :limit """
)
List<Object[]> findSirenAlarmTimeActivation(@Param("activationUUIDs") List<UUID> activationUUIDs,
                                                              @Param("orderClause") String orderClause, @Param("offset") int offset, @Param("limit") int limit )
Run Code Online (Sandbox Code Playgroud)

我用DESC写了一个单元测试,然后用ASC调用,反之亦然,看来第一个调用是什么,第二个给出了相同的结果。

sql postgresql spring jpa native

2
推荐指数
1
解决办法
6684
查看次数