JPA WHERE条款
我问的是WHERE条款。我在网上搜索过,但没有找到我问题的答案 我有几个实体类,如下所示:JPA WHERE条款,jpa,Jpa,我问的是WHERE条款。我在网上搜索过,但没有找到我问题的答案 我有几个实体类,如下所示: @NamedQuery(name = "selectTrasy", query = "SELECT t FROM Trasa t WHERE t.raport = :raport ORDER BY t.id") @Entity public class Trasa implements Serializable { @Id @Column(name = "id", unique = true
@NamedQuery(name = "selectTrasy",
query = "SELECT t FROM Trasa t WHERE t.raport = :raport ORDER BY t.id")
@Entity
public class Trasa implements Serializable {
@Id
@Column(name = "id", unique = true )
@GeneratedValue
private Long id;
@Column(name = "data_z")
private Date dataz;
@Column(name = "data_do")
private Date datado;
@Column(name = "czas_z")
private String czasZ;
@Column(name = "czas_do")
private String czasDo;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "miejscowosc_z")
private MiejscowoscDB miejscowoscZ;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "miejscowosc_do")
private MiejscowoscDB miejscowoscDo;
@OneToOne(fetch = FetchType.LAZY)
private Uzytkownik user;
@OneToOne(fetch = FetchType.LAZY)
private Raport raport;
@Override
public boolean equals(Object other) {
return (other != null && getClass() == other.getClass() && id != null)
? id.equals(((Trasa) other).id)
: (other == this);
}
@Override
public int hashCode() {
return (id != null)
? (getClass().hashCode() + id.hashCode())
: super.hashCode();
}
//next I have getters and setters
}
@Entity
public class Raport implements Serializable {
@Id
@Column(name = "id", unique = true )
@GeneratedValue
private Long id;
@Column(name = "data")
private Date data;
@Column(name = "nazwa")
private String nazwa;
@Enumerated(EnumType.STRING)
private Powod powod;
@OneToOne(fetch = FetchType.LAZY)
private Uzytkownik uzytkownik;
@Override
public boolean equals(Object other) {
return (other != null && getClass() == other.getClass() && id != null)
? id.equals(((Raport) other).id)
: (other == this);
}
@Override
public int hashCode() {
return (id != null)
? (getClass().hashCode() + id.hashCode())
: super.hashCode();
}
//getters and setters
}
我的问题是为什么这个查询不能正常工作。返回的列表为空,但数据库中存在记录,当我想返回所有Trasa记录时,一切正常,只有在我添加带有raport属性的WHERE子句时才起作用
trasy = (List<Trasa>)(manager.createNamedQuery("selectTrasy")
.setParameter("raport", propertyWydatek.getRaport())
.getResultList());
trasy=(列表)(manager.createNamedQuery(“selectTrasy”)
.setParameter(“raport”,propertyWydatek.getRaport())
.getResultList());
将查询更改为:
@NamedQuery(name = "selectTrasy",
query = "SELECT t FROM Trasa t WHERE t.raport.id = :raportId ORDER BY t.id")
然后像这样运行它:
trasy = (List<Trasa>)(manager.createNamedQuery("selectTrasy")
.setParameter("raportId", propertyWydatek.getRaport().getId())
.getResultList());
如果没有错误,则表示您正在连接到其他数据库或没有记录。切换日志级别以调试并查看生成的sql查询。我注意到您在Trasa实体的raport属性中使用了FetchType.LAZY。是否有可能PropertyWatek带来一个未提取、空或空的getRaport()调用?我已经写过,记录存在于数据库中,并且返回时没有WHERE子句。@Bonifacio raport coludn`n`n't non-fetched、empty或null,但是没有从raport提取属性uzytkownik。也没有提取uzytkownik。我想这没有问题。我知道这个解决方案,但我认为我可以用其他方法来解决这个问题。同样的问题,在调试器中,raport's'id'是例如8,但在SQL中是空的,为什么?它是空的还是显示为
?
?您需要更多的日志设置来显示替代?
的实际值。使用这些log4j设置:log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.type=TRACE(我假设您使用的是hibernate..)我已经设置了这些设置,但仍然有相同的日志信息。
@NamedQuery(name = "selectTrasy",
query = "SELECT t FROM Trasa t join t.raport r WHERE r.id = :raportId ORDER BY t.id")