相关疑难解决方法(0)

使用Hibernate时如何使用参数值打印查询字符串

在Hibernate中是否可以使用实际值而不是问号来打印生成的SQL查询?

如果使用Hibernate API无法打印具有实际值的查询,您会建议如何?

java sql orm hibernate

370
推荐指数
11
解决办法
32万
查看次数

如何在Hibernate 4中配置日志记录以使用SLF4J

Hibernate 3.x使用进行日志记录.Hibernate 4.x使用.我正在编写一个独立的应用程序,它使用Hibernate 4和SLF4J进行日志记录.

如何配置Hibernate以登录SLF4J?

如果那不可能,我怎么能配置Hibernate的日志记录呢?

关于日志记录的Hibernate 4.1手册部分首先警告它是......

完全过时了.Hibernate从4.0开始使用JBoss Logging.当我们将此内容迁移到开发人员指南时,这将记录在案.

......继续谈论SLF4J,所以没用.入门指南开发人员指南都没有谈论记录.迁移指南也没有.

我已经查找了有关jboss-logging本身的文档,但我根本找不到任何文档.在GitHub的页面是沉默的,和JBoss的社区项目页面甚至没有列出的jboss-记录.我想知道项目的bug跟踪器是否可能有任何与提供文档相关的问题,但事实并非如此.

好消息是,在应用程序服务器(如JBoss AS7)中使用Hibernate 4时,很大程度上会记录日志记录.但是我如何在独立应用程序中配置它?

logging hibernate slf4j hibernate-4.x jboss-logging

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

JPA列具有不正确的下划线

我使用JPA进行数据库访问,并使用正确的名称注释每一列.现在如果我执行查询(例如findAll())它返回

Unknown column 'program0_.program_id' in 'field list'
Run Code Online (Sandbox Code Playgroud)

错误消息是正确的program_id是未知的,因为真实姓名是programId.

型号:程序

  @Entity
  @Table(name = "programs")
  @XmlRootElement
  public class Program implements Serializable {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          @Basic(optional = false)
          @Column(name = "programId")
          private Long programId;
          @ManyToMany
          @JoinTable(
                  name = "programlabels",
                  joinColumns = {
                    @JoinColumn(name = "program", referencedColumnName = "programId")},
                  inverseJoinColumns = {
                    @JoinColumn(name = "label", referencedColumnName = "labelId")})
          private Collection<Label> labels;
        }
Run Code Online (Sandbox Code Playgroud)

标签

@Entity
@Table(name = "labels")
@XmlRootElement
public class Label implements Serializable {
  @Id
  @Basic(optional …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa jdbc

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

在hibernate中包含log4j属性文件,以显示带有值而不是问号的查询

我有crearte log4j.properties文件,如下所示:

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我如何将其包含在hibernate.cfg.xml文件中吗?对不起,我实际上不知道log4j是如何工作的.我创建它来显示我的hibernate查询value而不是?但它仍然没有显示?任何变化所以我需要进一步继续吗?

我从这里参考Hibernate显示真正的SQL

java hibernate log4j

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

Hibernate在SQL查询中显示问号

如何在查询中查看实际值而不是问号?现在,我看到了

Hibernate: inser into TABEL (ID, FORMAT, SIZE) values (?,?,?)
Run Code Online (Sandbox Code Playgroud)

我想看到使用的真实值而不是问号.

我在我的hibernate配置文件中设置了它并打开了调试标志.

<property name="show_sql"> true </property>
Run Code Online (Sandbox Code Playgroud)

先感谢您.

java hibernate

12
推荐指数
1
解决办法
5827
查看次数

使用JPA merge()时的OptimisticLockException

我有一个休息应用程序,其中一个资源可以更新.以下是负责实现此任务的两种方法:

  1. updateWithRelatedEntities(String,Store):接收通过反序列化PUT请求实体构造的id和新对象Store,在新对象上设置版本(用于乐观锁定)并在事务中调用update.

    public Store updateWithRelatedEntities(String id, Store newStore) {
        Store existingStore = this.get(id);
    
        newStore.setVersion(existingStore.getVersion());
    
        em.getTransaction().begin();
        newStore = super.update(id, newStore);
        em.getTransaction().commit();
    
        return newStore;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. update(String,T):进行更新的通用方法.检查id是否匹配并执行合并操作.

    public T update(String id, T newObj) {
       if (newObj == null) {
        throw new EmptyPayloadException(type.getSimpleName());
       }
    
    
       Type superclass = getClass().getGenericSuperclass();
    
       if (superclass instanceof Class) {
           superclass = ((Class) superclass).getGenericSuperclass();
       }
    
       Class<T> type = (Class<T>) (((ParameterizedType) superclass).getActualTypeArguments()[0]);
    
       T obj = em.find(type, id);
    
       if (!newObj.getId().equals(obj.getId())) {
           throw new IdMismatchException(id, newObj.getId());
       }
    
       return em.merge(newObj);
    }
    
    Run Code Online (Sandbox Code Playgroud)

问题是这个调用:T …

java hibernate jpa

12
推荐指数
1
解决办法
1740
查看次数

在控制器中使用 @Async 和 CompletableFuture 可以提高我们 api 的性能吗?

我想要实现的是,通过以这种简单的方式使用多线程,在我的 RESTApi 控制器中使用 @Async 和 CompletableFuture 可以获得更好的性能吗?

这是我所做的,这是我的控制器:

@PostMapping("/store")
@Async
public CompletableFuture<ResponseEntity<ResponseRequest<CategoryBpsjResponseDto>>> saveNewCategoryBPSJ(@Valid @RequestBody InputRequest<CategoryBPSJRequestDto> request) {
    
    CompletableFuture<ResponseEntity<ResponseRequest<CategoryBpsjResponseDto>>> future = new CompletableFuture<>();

    future.complete(ResponseEntity.ok(new ResponseRequest<>("Okay", categoryBPSJService.save(request))));
    return future;
}
Run Code Online (Sandbox Code Playgroud)

VS

@PostMapping("/store")
public ResponseEntity<ResponseRequest<CategoryBpsjResponseDto>> saveNewCategoryBPSJ(@Valid @RequestBody InputRequest<CategoryBPSJRequestDto> request) {
    
    return ResponseEntity.ok(new ResponseRequest<>("okay", categoryBPSJService.save(request));
}
Run Code Online (Sandbox Code Playgroud)

正如你在我的第一个控制器函数中看到的,我在我的函数响应中添加了 CompletableFuture,但是在我的服务中,我在这一行中保存的categoryBPSJService.save(request)不是异步的,只是一个看起来像这样的简单函数:

public CategoryBpsjResponseDto save(InputRequest<CategoryBPSJRequestDto> request) {
    CategoryBPSJRequestDto categoryBPSJDto = request.getObject();

    Boolean result = categoryBPSJRepository.existsCategoryBPSJBycategoryBPSJName(categoryBPSJDto.getCategoryBPSJName());

    if(result){
        throw new ResourceAlreadyExistException("Category BPSJ "+ categoryBPSJDto.getCategoryBPSJName() + " already exists!");
    }

    CategoryBPSJ categoryBPSJ = new CategoryBPSJ();
    categoryBPSJ = map.DTOEntity(categoryBPSJDto);

    categoryBPSJ.setId(0L); …
Run Code Online (Sandbox Code Playgroud)

java performance spring asynchronous completable-future

12
推荐指数
1
解决办法
1279
查看次数

Hibernate hql,在同一个查询中执行多个更新语句

我想在hibernate Hql中的同一个查询中执行多个更新语句.如下:

hql = " update Table1 set prob1=null where id=:id1; "
                + " delete from Table2 where id =:id2 ";
...
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

在同一个executeUpdate调用中,我想更新Table1中的记录并从Table2中删除记录.

那可能吗?

java mysql hibernate hql

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

如何查看hibernate触发的查询?

当在tomcat中运行hibernate应用程序时,如何查看hibernate正在触发哪些查询?

java tomcat hibernate

9
推荐指数
2
解决办法
5004
查看次数

Spring Data JPA:删除乐观锁定语义

Foo一个@Version列的实体.如果我想删除它,我希望Spring Data JPA和/或Hibernate检查@Version列的当前值是否与数据库中的值匹配.如果没有,则应拒绝删除.这与预期的分离实体一起工作:

@Transactional
public void delete(Foo foo) {
    fooRepository.delete(foo); // throws ObjectOptimisticLockingFailureException
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我首先从存储库加载实体,然后使用不同的版本在同一事务中删除它,则无论@Version列的值如何,删除都会通过:

@Transactional
public void delete(int fooId, long version) {
    Foo foo = fooRepository.findOne(fooId);
    foo.setVersion(version);
    fooRepository.delete(foo); // passes regardless of value of version
}
Run Code Online (Sandbox Code Playgroud)

当我查看Hibernate调试输出时,执行版本比较(delete from foo where id=? and version=?)但不是我期望的效果.

我错过了什么?

java hibernate jpa spring-data-jpa

8
推荐指数
2
解决办法
2092
查看次数