2014-04-28 10 views
5

Mam kwerendy, które chcę napisać w moim modelu ProduktuWewnętrzna przyłączyć zabaw ramowej ebean

select * from shop inner join product on product.shops_id=shop.id where product.name=keyword 

Shop.java

public class Shop extends Model { 

    @Id 
    @SequenceGenerator(name="shop_gen", sequenceName="shop_id_seq", allocationSize=1) 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="shop_gen") 
    @Column(name="id") 
    public Long id; 

    @Required 
    public String name; 

    @Required 
    public String addressLine1; 

    public String addressLine2; 

    public String addressLine3; 

    @Required 
    public String city; 

    @Required 
    public String town; 

    @Required 
    public String phoneNumber; 

    @OneToMany(mappedBy = "shops",cascade = CascadeType.REMOVE) 
    public List<Product> products=new ArrayList<>(); 


    @Required 
    @OneToOne 
    public String category; 

    @Lob 
    @Column(name = "shop_pic") 
    public byte[] shop_pic; 


    @ManyToOne 
    @Required 
    public User owner; 

} 

Product.java

public class Product extends Model { 
    @Id 
    @SequenceGenerator(name="product_gen", sequenceName="product_id_seq", allocationSize=1) 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="product_gen") 
    @Column(name="id") 
    public Long id; 
    @Required 
    public String name; 
    @Required 
    public Float price; 
    @OneToOne 
    @Required 
    public String category; 
    @ManyToOne 
    public Shop shops; 
} 

Moim głównym celem jest znalezienie listy sklepów, które h ma określony produkt.

gdzie słowo kluczowe zmienia się za każdym razem. Odniosłem się do podobnego pytania, ale nie rozumiem żadnego z nich. Każda pomoc będzie mile widziane

Odpowiedz

1

Z właściwych relacji w swoich modelach byłoby:

Shop.find.where().like("product.name", keyword).findList(); 

każdym razie nie wiemy nic na temat swoich modeli.

+0

aktualizowane na moje pytanie powyżej – akku

0

Jest to rozwiązanie problemu:

Początkowo dodać Finder klasy Produktu

public static Finder<Long,Product> find = new Finder<Long,Product>(
    Long.class, Product.class 
); 

Zmiana atrybutu shops do shop w klasie produktów. Niewłaściwe jest podawanie liczby mnogiej, gdy istnieje pojedynczy obiekt.

Następnie do listy sklepów zawierających produkt o podanej nazwie dodać kod podobny do tego pobierania:

List<Product> productList = Product.find.where().like("name", keyword).findList(); 
List<Shop> shopList = new ArrayList<Shop>(); 
for(Product product:productList) 
    shopList.add(product.shop);