我的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)
一个简单的解决方法是定义文本列.
我知道我可以在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) 我正在将 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 列?
我使用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 ×3
hibernate ×2
jpa ×2
postgresql ×2
arraylist ×1
eclipselink ×1
in-clause ×1
json ×1
nativequery ×1
spring ×1
spring-data ×1