我正在使用JpaSpecificationExecitor
创建自定义查询。如何为以下SQL创建规范?
select * from employee e, address a where e.id=23415 and e.name="Foo" and a.city="London";
Java类:
public static Specification<Employee> searchEmployee(final Map<String,String> myMap) {
return new Specification<Employee>(){
@Override
public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//Need to query two tables Employee and Address
}
}
这是一个有效的测试
@Test
public void test1() {
repository.save(makeEmployee("billy", "London"));
repository.save(makeEmployee("noby", "London"));
repository.save(makeEmployee("fred", "London"));
assertEquals(3, repository.count());
final Long id = 3l;
final String name = "noby";
final String city = "London";
Specification<Employee> specification = new Specification<Employee>() {
public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(builder.equal(root.get("id"), id));
predicates.add(builder.equal(root.get("name"), name));
predicates.add(builder.equal(root.get("address").get("city"), city));
return builder.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
List<Employee> find = repository.findByIdAndNameAndAddressCity(id, name, city);
assertEquals(1, find.size());
find = repository.findAll(specification);
assertEquals(1, find.size());
}
private Employee makeEmployee(String name, String city) {
Address address = new Address();
address.setCity(city);
Employee employee = new Employee();
employee.setName(name);
employee.setAddress(address);
return employee;
}
}
仓库看起来像这样
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long>, JpaSpecificationExecutor<Employee> {
List<Employee> findByIdAndNameAndAddressCity(Long id, String name, String city);
}
实体看起来像这样
@Entity(name = "EMPLOYEE")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "NAME")
private String name;
@Column(name = "DATE_OF_BIRTH")
private Date dob;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "address_id", referencedColumnName = "id", nullable = false)
private Address address;
希望这有帮助。
问题内容: 我不理解泛型和数组之间的联系。 我可以使用通用类型创建数组引用: 但是不能创建具有通用类型的数组对象: 但它有效: 问题答案: 你不应该混淆数组和泛型。他们在一起不好。数组和泛型类型执行类型检查的方式有所不同。我们说数组是经过整形的,而泛型则不是。结果,你会看到这些差异适用于数组和泛型。 数组是协变的,泛型不是: 那意味着什么?你现在必须已经知道以下分配有效: 基本上,Object[]
我正在尝试为尚未添加到GitHub Enterprise安装中的任何团队或组织的用户生成组织邀请。 我已经按照医生的指示: https://developer.github.com/v3/orgs/members/#create-组织邀请 并根据需要添加Accept标头: 应用程序/vnd.github.dazzler-preview json 我是该组织的所有者,但我仍然只收到: {"消息":"
问题内容: 我的问题很简单,如何使这段代码变得懒惰: 上面的代码可以计算组合,但是可以在内存中创建整个数组数组。我需要让它返回类似的东西,除了Swift类型系统不允许我做一些通用的事情。 有什么想法如何实现这一目标并保持功能风格吗? 附注:我确实想过用生成器解决这个问题并跟踪索引的另一种方法,但是我不想跟踪任何状态,我想要一个纯函数式(如FP中)的解决方案。Haskell默认情况下会这样做,顺便说
我试图创建一个使用的组合注释,但是我似乎无法使其工作。 这是有效的(使用): 但是,直接使用不起作用(大概是由于只允许在方法上使用): 无法将用作可组合注释吗?
问题内容: 我想使用simpleJdbcInsert类和executeBatch方法 http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html 所以我需要传递一个as参数数组。如何创建这样的数组?我试过的是 错误:无法创建通用数组 A
我们可以从AWS控制台创建、编辑、删除组来维护DynamoDb表的逻辑分组。我搜索了AWS文档和论坛,但没有找到如何使用CloudFormation创建DynamoDb表组的方法,也没有找到如何使用AWS.NET SDK在组内创建表的方法。这可能吗?