2017-04-13 31 views
0

我下面的兩個實體,抓取一對多對象在Hibernate中

用戶

@Entity 
@EqualsAndHashCode 
public class User extends BaseEntity{ 

    @Getter @Setter 
    private String msid; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "sender") 
    @Getter 
    private List<Media> sentList; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "receiver") 
    @Getter 
    private List<Media> receivedList; 

    protected User(){ 
    super(); 
    } 

    public User(String yguid) { 
    this(); 
    this.yguid = yguid; 
    this.receivedList = new ArrayList<>(); 
    this.sentList = new ArrayList<>(); 
    } 
} 

媒體

@Entity 
@EqualsAndHashCode 
public class Media extends BaseEntity{ 

    @Getter @Setter 
    private String mediaId; 
    @Getter @Setter 
    private String url; 
    @ManyToOne 
    @JoinColumn(name="sender") 
    @Getter @Setter 
    private User sender; 
    @ManyToOne 
    @JoinColumn(name="receiver") 
    @Getter @Setter 
    private User receiver; 

    public Media() { 
    super(); 
    } 

    public Media(String mediaId, String url, User sender, User receiver) { 
    this(); 
    this.mediaId = mediaId; 
    this.url = url; 
    this.sender = sender; 
    this.receiver = receiver; 
    } 
} 

無論從BaseEntity

public abstract class BaseEntity { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private final Long id; 

    public BaseEntity() { 
    id = null; 
    } 
} 

繼承我想爲我們提取所有媒體呃。這是我的代碼

public List<Media> getReceivedMediaForUser(User user){ 
    Session session = sessionFactory.openSession(); 
    Query query = session.createQuery("FROM Media m WHERE m.receiver = :user"); 
    //parse query to get result 
    session.close(); 
    // 
    return null; 
    } 

這不會編譯,有人可以幫助我形成正確的查詢並獲得結果。我是Spring和Hibernate的新手。

+0

什麼是編譯錯誤?你也沒有設置':user'參數 –

+0

請問你能否添加特定的錯誤。這是代碼編譯錯誤還是在運行時查詢解析失敗? – Ruben

回答

-1

你可以做到這一點,如下圖所示(這是按照不解決方案的例子。實現的解決方案因此您的要求),

Query query = session.createSQLQuery(
"select * from stock s where s.stock_code = :stockCode") 
.addEntity(Stock.class) 
.setParameter("stockCode", "7277"); 
List result = query.list(); 

您的解決方案可能是

Session session = sessionFactory.openSession(); 
    Query query = session.createQuery("select * FROM Media m WHERE m.receiver = :user") 
    .addEntity(Media.class) 
    .setParameter("user", "xyz"); 
    List result = query.list(); 
    session.close(); 
+1

這並沒有解決OP的問題..甚至沒有關閉 – Akshay

+0

@Akshay他沒有設置:導致編譯錯誤的用戶參數。在我的例子中,我向他展示瞭如何添加實體。他在spring和hibernate中是新的,所以他很可能不知道如何添加實體以及如何使用hql。 –

+0

第二次編輯看起來不錯..不要嘗試發佈示例 – Akshay