Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA WHERE条款_Jpa - Fatal编程技术网

JPA 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

我问的是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 )
@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")