У меня сложный (для меня) запрос гибернации, который я пытаюсь выяснить, и моя голова просто не может понять, как это сделать.
Мне нужно найти все объекты Устройства, которые имеютEntityRegistration.userName = ~ "foo".
Классы сущностей:
@Entity()
@Table
public class Device {
@Basic()
@Column(name = "HostName")
private String hostName = null;
@Basic()
@Column(name = "RegistrationID")
private String registrationID = null;
}
@Entity()
@Table
public class EntityRegistration {
@Basic()
@Column(name = "ID")
private String iD = null;
@Basic()
@Column(name = "UserName")
private String userName = null;
}
Device.registrationID сопоставляется с EntityRegistration.iD.Я не хочу изменять таблицу, чтобы EntityRegistration в качестве ссылки OneToMany.
Вот что я пробовал на основе похожих запросов, где вместо базового типа есть ссылка OneToMany, как в этом случае:
CriteriaBuilder builder = context.getBuilder();
Root<Device> root = context.getRoot();
Join<Device,EntityRegistration> joinReg = root.join("registrationID");
builder.lower(joinReg.get("id")), userName);
Я понимаю, почему этот код не работает, но я не могу понять, как правильно написать запрос для этого случая, когда у меня есть ссылка на идентификатор.