【发布时间】:2014-06-26 12:03:27
【问题描述】:
我想知道是否可以使用域对象构建 jpa 查询。
例如:
@Entity
public class User {
private String firstname;
private String lastname;
private String email;
}
实际上,对象有更多的字段。我收到此对象的有效 json 字符串。但并非所有字段都已填写。
例如,我只填写了名字:
{"firstname":"Peter","lastname":"","email":""}
这个 JSON 被反序列化为 User 对象
现在我只想使用带有接收参数的对象进行搜索。结果应该是所有名字为 Peter 的用户。
问题是可以只给查询对象吗?
感谢您的意见
编辑 1
感谢您到目前为止的帮助。我找到了使用实体搜索合同的解决方案。在这个解决方案中,我发布了一些更新的合同值和其他方法。
json 现在看起来像这样:
contract = {fromDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), endDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), Season: {
season: "SO14"}, name: {name: "peter"}, category:{category:"SomeString"}};
console.log(contract);
$.ajax({
url:'/contracts/search/',
dataType: "json",
type: "POST",
mimeType: 'application/json',
contentType: "application/json",
data: JSON.stringify(contract),
success: function(data) {
console.log(data);
}
});
控制器接收如下:
@RequestMapping(value = "/search/", method = RequestMethod.POST, headers = "Accept=application/json")
public ResponseEntity<String> getVertagFromSearch(@RequestBody String json, UriComponentsBuilder uriBuilder){
Contract contract = contract.fromJsonToContract(json);
List<Contract> contractList = Contract.findAllContractsPerContract(contract);
return new ResponseEntity<String>(Contract.toJsonArray(contractList), headers, HttpStatus.OK);
}
反序列化在这里:
public static contract fromJsonToContract(String json) {
return new JSONDeserializer<Contract>().use(Calendar.class, new CalendarTransformer("dd-MM-yyyy HH:mm")).use(null, Contract.class).deserialize(json);
}
这里是交易方法。
@Transactional
public static List<Contract> findAllContractsPerContract(Contract contract) {
EntityManager e = entityManager().getEntityManagerFactory().createEntityManager();
Session session = e.unwrap(Session.class);
Example contractExample = Example.create(contract);
Criteria c = session.createCriteria(Contract.class).add(contractExample);
List<Contract> list = c.list();
return list;
}
通过这个例子,我得到了结果。现在的问题是,是否可以向 sql 添加一些标准,例如“更大或更小”或“喜欢”。因为目前似乎所有条件都用“等于”搜索。
谢谢
【问题讨论】:
-
查看 Hibernate By Example java.dzone.com/articles/hibernate-query-example-qbe。它是 Hibernate 特有的,在 JPA 中没有等价物
标签: java json hibernate rest jpa