相关疑难解决方法(0)

将PostgreSQL JSON列映射到Hibernate值类型

我的PostgreSQL DB(9.2)中有一个带有JSON类型列的表.我很难将此列映射到JPA2实体字段类型.

我试图使用String,但是当我保存实体时,我得到一个异常,它无法将字符转换为JSON.

处理JSON列时使用的正确值类型是什么?

@Entity
public class MyEntity {

    private String jsonPayload; // this maps to a json column

    public MyEntity() {
    }
}
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方法是定义文本列.

java postgresql json hibernate jpa

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

JPA将列表传递给命名本机查询中的IN子句

我知道我可以在JPA中将列表传递给命名查询,但NamedNativeQuery怎么样?我尝试了很多方法,但仍然无法将列表传递给NamedNativeQuery.任何人都知道如何将列表传递给NamedNativeQuery中的in子句?非常感谢你!

NamedNativeQuery如下:

@NamedNativeQuery(
   name="User.findByUserIdList", 
   query="select u.user_id, u.dob, u.name, u.sex, u.address from user u "+
         "where u.user_id in (?userIdList)"
)
Run Code Online (Sandbox Code Playgroud)

它被称为这样:

List<Object[]> userList = em.createNamedQuery("User.findByUserIdList").setParameter("userIdList", list).getResultList();
Run Code Online (Sandbox Code Playgroud)

但结果并不像我预期的那样.

System.out.println(userList.size());  //output 1

Object[] user = userList.get(0);
System.out.println(user.length);   //expected 5 but result is 3
System.out.println(user[0]);       //output MDAVERSION which is not a user_id
System.out.println(user[1]);       //output 5
System.out.println(user[2]);       //output 7
Run Code Online (Sandbox Code Playgroud)

jpa arraylist in-clause nativequery

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

如何在 jsonb 列上使用 Spring JPA 进行查询?

我正在将 spring JPA 与 PostgreSQL 数据库一起使用。我有一个实体如下:

@Entity
@TypeDef(name="json_binary", typeClass = com.vladmihalcea.hibernate.type.json.JsonBinaryType.class)
public class LiveTokens {

   @Id
   @GeneratedValue()
   private Long id;

   private String username;

   @Type(type="json_binary")
   @Column(columnDefinition = "jsonb")
   private Token token
}
Run Code Online (Sandbox Code Playgroud)

Token

public class Token {
   private Long expireTime;
   private String accessToken;
}
Run Code Online (Sandbox Code Playgroud)

为了使用Hibernate将对象保存到列,我使用了Hibernate Types项目。现在我想获得LiveToken过期的All 。我不能用 Spring JPA 做到这一点。如何使用 Spring 数据 JPA 查询 posgresql jsonb 列?

java postgresql spring hibernate spring-data-jpa

6
推荐指数
2
解决办法
7730
查看次数

使用JpaSpecificationExecutor时使用QueryHint

我使用spring数据和JpaSpecificationExecutor::findAll方法来获取模型。调用此方法时如何使用查询提示?
上面的源代码工作正常,但是我无法为我的JPA提供程序(在我的情况下为EclipseLink)设置QueryHint。

@Repository
public interface ProductRepository extends JpaRepository<Product, Integer>, JpaSpecificationExecutor<Product> {
}

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> findByTitle(String locale, String titleToSearch) {
        return productRepository.findAll((Root<ProductCategory> root, CriteriaQuery<?> query, CriteriaBuilder builder) -> {
            return builder.equal(builder.function("jsonb_extract_path_text", String.class, root.<String>get("title"), builder.literal(locale)), titleToSearch);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

以上是我使用spring-data使用查询提示的方式,

@Repository
public interface ProductRepository extends JpaRepository<Product, Integer>, JpaSpecificationExecutor<Product> {

    @QueryHints(value = {
        @QueryHint(name = org.eclipse.persistence.config.QueryHints.BATCH_TYPE, value = "JOIN"),
        @QueryHint(name = org.eclipse.persistence.config.QueryHints.BATCH, value = "p.productCategory"),
        @QueryHint(name = org.eclipse.persistence.config.QueryHints.BATCH, value = "p.productFileList")
    }, …
Run Code Online (Sandbox Code Playgroud)

java specification-pattern eclipselink spring-data

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