select * from person as p join personal_information as pi on p.id=pi.personId
where p.cellNumber='1234567890' or pi.cellNUmber='123456789';
以下是Person表的结构:
`id` `name` `cellNumber` `emailAddress`
以下是personal_information表的结构:
`id` `personId`(foreign key from Person table) `cellNumber`
现在我处于一种需要取特定细胞数的人的情况。让我们说根据我的查询它是123456789 并且Person表有一个cellNumber为000000000 所以记录就像:
101 John 000000000 'abc@gmail.com'
但personal_information表有5条具有该cellNumber的记录 例如 personal_information表
1 101 123456789
2 102 123456789
3 103 123456789
4 104 123456789
5 105 123456789
现在基于cellNumber我希望获取Person表中的所有这5条记录。 但很可能这个数字只在Person表中匹配,即
人员表
109 John 123456789 'john@gmail.com'
所以这次我想从Person表中获取记录
我上面写的查询解决了我的目的,但我想用Criteria构建器来完成 以下是Person和person_information on Entity level
之间的关系public class Person {
@OneToOne(mappedBy = "person", optional = true, fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
private PersonalInformation personalInformation;
//getters and setters
}
public class PersonalInformation() {
@OneToOne(optional = false)
@JoinColumn(name = "personId", referencedColumnName = "id")
private Person person;
//getters and setters
}
使用条件构建器我可以执行以下任一操作,即根据cellNumber从Person表中获取记录,或者根据personal_information表中的cellNumber从Person表中获取记录
但我希望我已正确解释了我的问题,我想根据cellNumber从两个表中获取记录
提前致谢。如果有任何遗失的信息并且您希望我发布,请告诉我。
P.S。 我尝试过但没有用的东西:
List<Predicate> predicates = Lists.newArrayList();
predicates.add(criteriaBuilder.or(
criteriaBuilder.like(person.get(Person_.cellNumber), 123456789),
criteriaBuilder.like(person.get(Person_.personalInformation).<Integer>get("cellNumber"), 123456789)
));
我也试过单独使用它们。
predicates.add (criteriaBuilder.like(person.get(Person_.cellNumber), 123456789));
predicates.add (criteriaBuilder.like(person.get(Person_.personalInformation).<Integer>get("cellNumber"), 123456789))