簡體   English   中英

Hibernate-為INNER JOIN查詢創建別名投影

[英]Hibernate - Create alias projection for INNER JOIN query

(這是我的域的簡化版本)

我有一個實體Product ,它與Connection具有1-to-N關系。 映射正常工作,因此當我需要檢索產品的連接時,只需執行product.getConnections();

我需要與舊系統的GUI集成,這需要以這種格式生成列表:

|PRODUCT_ID|NAME|CONNECTION_ID|NAME|
|1|Product A|10|Connection A|
|1|Product A|11|Connection B|
|1|Product A|12|Connection C|

這基本上是此查詢的結果:

SELECT *
FROM Product P
INNER JOIN Connection C ON C.PRODUCT_ID = P.PRODUCT_ID

我想在Product實體上創建一個屬性,該屬性可以用連接的名稱填充,以便可以重用服務上的現有邏輯。 我嘗試使用@Formula但這不起作用。 看起來我可以通過創建Projection別名來實現這一點,但是我沒有成功。

我們使用Hibernate的Criteria and Projection API來執行查詢。

Criteria productCriteria = session.createCriteria(Product.class);
ProjectionList columns = Projections.projectionList();

columns.add(Projections.property("productId"));
columns.add(Projections.property("name"));
columns.add(Projections.property("connectionName")); // How to make this work?
productCriteria.setProjection(columns);

List<Product> prodList = productCriteria.list();

這些是我的實體:

class Product {
    private Long productId;
    private String name;

    @OneToMany(mappedBy = "product")
    private List<Connection> connections;

    // How to get this populated?
    @Transient 
    private String connectionName;


}

class Connection {
    private Long connectionId;
    @Column(name = "PRODUCT_ID")
    private Long productId;
    private String name;

    @ManyToOne
    @JoinColumn(name = "PRODUCT_ID", insertable = false, updatable = false)
    private Product product;

}

想法是創建連接表的條件; 嘗試類似的東西:

Criteria productCriteria = session.createCriteria(Product.class);
Criteria connectionCriteria  = criteria.createCriteria("connections", "c", CriteriaSpecification.INNER_JOIN);

ProjectionList columns = Projections.projectionList();

columns.add(Projections.property("productId"));
columns.add(Projections.property("name"));
columns.add(Projections.property(connectionCriteria.getAlias() + ".connectionId"));
columns.add(Projections.property(connectionCriteria.getAlias() + ".name"));

productCriteria.setProjection(columns);

List<Product> prodList = productCriteria.list();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM