Java 如何使用复杂查询获取带有Ebean的项目列表

Java 如何使用复杂查询获取带有Ebean的项目列表,java,playframework,ebean,Java,Playframework,Ebean,我有3个模型,城镇模型,有regionId字段,地区模型,有stateId字段 城镇模式: @Entity @Table(name = "town") public class Town extends Model { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "town_id_seq") private Integer id; @Column(name = "regi

我有3个模型,城镇模型,有regionId字段,地区模型,有stateId字段

城镇模式:

@Entity
@Table(name = "town")
public class Town extends Model {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "town_id_seq")
    private Integer id;

    @Column(name = "region_id")
    private Integer regionId;
    ...
区域模型:

@Entity
@Table(name = "region")
public class Region extends Model {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "region_id_seq")
    private Long id;

    @Column(name = "state_id", nullable = false)
    private Long stateId;
    ...
国家的模式:

@Entity
@Table(name = "state")
public class State extends Model {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "state_id_seq")
    private Integer id;
    ...
我需要得到特定州的城镇列表。在SQL中,我会这样做:

select * from town join region on town.region_id = region.id 
where region.state_id=15666
我的确弄到了两张桌子

public static List<Town> findAllInState(Integer stateId) {
    return Ebean.find(Town.class).fetch("region").findList();
}
公共静态列表findAllInState(整型stateId){
返回Ebean.find(Town.class).fetch(“region”).findList();
}
但是当我尝试添加
.where().eq(“region.stateId”,stateId)
时,它会显示
BeanList size[0]hasMoreRows[false]list[]


如何使用Ebean获取它?

这可以通过在
城镇
地区
中添加
@ManyToOne
关系而不是
@Column
字段来实现

因此,在
城镇中
类删除:

@Column(name = "state_id", nullable = false)
private Long stateId;
@Column(name = "state_id", nullable = false)
private Long stateId;
并加上:

@ManyToOne
public Region region;
@ManyToOne
public State state;
区域中
类删除:

@Column(name = "state_id", nullable = false)
private Long stateId;
@Column(name = "state_id", nullable = false)
private Long stateId;
并加上:

@ManyToOne
public Region region;
@ManyToOne
public State state;
然后,您将能够通过以下查询找到给定州的城镇:

Ebean.find(Town.class).where().eq("region.state.id", stateId).findList();