有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用复杂查询获取带有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 = "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[]

我如何使用Ebian获得它


共 (1) 个答案

  1. # 1 楼答案

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

    因此在Town类中删除:

    @Column(name = "state_id", nullable = false)
    private Long stateId;
    

    并加上:

    @ManyToOne
    public Region region;
    

    Region类中删除:

    @Column(name = "state_id", nullable = false)
    private Long stateId;
    

    并加上:

    @ManyToOne
    public State state;
    

    然后,您将能够通过以下查询找到给定州的城镇:

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