小编Raf*_*LDI的帖子

Hibernate Java 在 SQL 中重新排列括号

我有一个@NamedQuery这样的

select i from MyTable i 
where 
(i.streetId = :streetId and i.cityId = :cityId) 
or 
(i.streetId is null and i.cityId = :cityId) 
or 
(i.streetId = :streetId and i.cityId is null)
Run Code Online (Sandbox Code Playgroud)

不知何故,Hibernate 将括号重新排列为

Hibernate: 
    select
        mytable0_.id as id1_14_,
        mytable0_.version as version2_14_,
        mytable0_.streetId as streetI3_14_,       
        mytable0_.cityId as cityId7_14_ 
    from
        myTable mytable0_ 
    where
        mytable0_.streetId=? 
        and mytable0_.cityId=? 
        or (
            mytable0_.streetId is null
        ) 
        and mytable0_.cityId=? 
        or mytable0_.streetId=? 
        and (
            mytable0_.cityId is null
        )
Run Code Online (Sandbox Code Playgroud)

为什么要这样做?(它们可能是等价的,但我更喜欢更简单的 where 子句)

当前的解决方法是用本机 SQL 编写它,但我只是想知道这是否是一个已知问题。

java hibernate jpql

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

Spring Rest Controller,关于重写方法的争论的路径变量

我有一个带有注释的控制器 @RestController,它实现了一个接口:

 public interface ContratEndpoint {

      String ROOT = "/api/contrats";

      String GET_CONTRAT = "";

      String GET_CONTRAT_PER_PK = "/{idContrat}";

      @RequestMapping(value = GET_CONTRAT)
      Contrat getContrat(@RequestParam(value = "contratId")Long contratId);


      @RequestMapping(value = GET_CONTRAT_PER_ID)
      ExtContrat getContratById(@PathVariable("idContrat") Long idContrat);
}
Run Code Online (Sandbox Code Playgroud)

控制器:

@RestController
@RequestMapping(value = ContratEndpoint.ROOT)
public class ContratController implements ContratEndpoint {

    //Injecting Services....

    @Resource
    private Mapper mapper;


    @Override
    public Contrat getContrat(Long contratId) {
    return mapper.map(contratService.get(contratId),Contrat.class);
    }

    @Override
    public ExtContrat getContratById(@PathVariable("idContrat") Long idContrat){
        Preconditions.checkArgument(idContrat !=null);
        return mapper.map(contratService.get(idContrat),ExtContrat.class);
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常。

。但是,对于第一个继承的方法,我不必使用注释参数,@RequestParam 并且效果很好。

至于我最初尝试的第二种方法:

 @Override
        public ExtContrat …
Run Code Online (Sandbox Code Playgroud)

java rest spring path-variables spring-data

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

Hibernate JPA:忽略错误的SQL外键值

我有一个要维护的项目,该项目的持久性层使用JPAHibernate并且它在MySQL服务器上运行,数据库不在数据库中 relational,并且引擎MyISAM在所有表上。

我有一些外键关系hps映射为@ManyToOne我实体上的关系。

现在的问题是,这些列中的某些列应该是foreignkeys为了正确映射而创建的,但它们不是(因为引擎是MyISAM,并且DBrelational是理论上的),因此其中一些列具有错误的值,例如(负数) -1,0,不存在的已故父母)

@Entity
public class EntityA {

   @ManyToOne
   @JoinColumn(name="COL_FK")
   private EntityB b;

}
Run Code Online (Sandbox Code Playgroud)

在数据库中,可能的值为COL_FK0,-1,DEAD PARENTS

我既不能更改数据库结构,也不能编辑列中的数据。我所能做的就是更改代码。

我怎么能告诉Hibernate忽略那些值,而不会RuntimeException仅仅因为它的一个元素包含了一个错误的foreingkey值就抛出一个列表。

谢谢。

更新:

@Embeddable
public class EntityA {
    @ManyToOne()
    @JoinColumn(name = "idClient")
    @NotFound(action = NotFoundAction.IGNORE)
    private ClientBO idClient;

}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪 :

AVERTISSEMENT: org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find xx.xxx.xx.xxx.ClientBO with id 210; nested exception is …
Run Code Online (Sandbox Code Playgroud)

java myisam hibernate jpa spring-data

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

标签 统计

java ×3

hibernate ×2

spring-data ×2

jpa ×1

jpql ×1

myisam ×1

path-variables ×1

rest ×1

spring ×1