如何使用复杂查询获取 Ebean 的项目列表
How do I get a list of items with Ebean using complex query
我有 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();
}
但是当我尝试添加 .where().eq("region.stateId", stateId)
时它显示 BeanList size[0] hasMoreRows[false] list[]
如何使用 Ebean 获取它?
这可以通过在 Town
和 Region
中添加 @ManyToOne
关系而不是 @Column
字段来完成。
所以在 Town
class 中删除:
@Column(name = "state_id", nullable = false)
private Long stateId;
并添加:
@ManyToOne
public Region region;
在Region
class中删除:
@Column(name = "state_id", nullable = false)
private Long stateId;
并添加:
@ManyToOne
public State state;
然后您将能够通过以下查询找到给定州的城镇:
Ebean.find(Town.class).where().eq("region.state.id", stateId).findList();
我有 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();
}
但是当我尝试添加 .where().eq("region.stateId", stateId)
时它显示 BeanList size[0] hasMoreRows[false] list[]
如何使用 Ebean 获取它?
这可以通过在 Town
和 Region
中添加 @ManyToOne
关系而不是 @Column
字段来完成。
所以在 Town
class 中删除:
@Column(name = "state_id", nullable = false)
private Long stateId;
并添加:
@ManyToOne
public Region region;
在Region
class中删除:
@Column(name = "state_id", nullable = false)
private Long stateId;
并添加:
@ManyToOne
public State state;
然后您将能够通过以下查询找到给定州的城镇:
Ebean.find(Town.class).where().eq("region.state.id", stateId).findList();