У меня 3 таблицы, RA, CC и EC.RA имеет внешний ключ 'ec', который отображается на столбец 'code' в таблице EC.У RA также есть другой внешний ключ, 'sc', который отображается на столбец 'code' в таблице CC.
@Entity
@NamedQueries({
@NamedQuery( name="getSettingsByCode, query="select object(o) from RA where o.sc.code = :someCode and o.ec.code is null" )
})
public class RA implements java.io.Serializable {
@Id
private long id;
private Timestamp recupdatetime;
@ManyToOne
@JoinColumn(name="SC")
private Cc sc;
@ManyToOne
@JoinColumn(name="EC")
private Ec ec;
Сущность для Cc
@Entity
public class Cc {
@OneToMany(mappedBy="sc")
private Set<RA> raCollection;
Сущность для Ec
@Entity
public class Ec {
@OneToMany(mappedBy="ec")
private Set<Recommendedalarmsetting> recommendedalarmsettingCollection;
При выполнении namedQuery генерируется следующий sql,
[sql] SELECT t0.ID, t0.RECUPDATETIME, t0.EC, t0.SC FROM RA t0, EC t1 WHERE (
((t0.sc = ?) AND (t1.CODE IS NULL)) AND (t1.CODE = t0.ec))
Правильно ли создан этот SQL?Я не уверен, что оператор IS NULL создает соединение с таблицей EC.