2015-01-07 3 views
2

У меня есть 3 модели, модель для города, у которой есть поле для regionId, модель для региона, у которой есть поле для stateId.Как получить список предметов с помощью Ebean с использованием сложного запроса

модели для города:

@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 ?

ответ

1

Это может быть сделано путем добавления @ManyToOne отношений в Town и Region вместо @Column полей.

Так Town класса REMOVE:

@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();