Talbeの結合時、複数Tableでカラムが衝突する場合
どうしよーと思っていましたができました。Select文の中で別名つけてBeanのプロパティと合わせればいいだけなのか。
SQL:2つのTableにPRICEがある。これを結合して1つBeanに詰めたい
create table PRODUCT ( NAME varchar(20) not null primary key, PRICE numeric(10,0) ); create table SALES ( PRODUCTNAME varchar(20) not null primary key, PRICE numeric(10,0), SALESDATE TIMESTAMP ); insert into PRODUCT values('TV_A', 500000); insert into PRODUCT values('TV_B', 600000); insert into PRODUCT values('TV_C', 700000); insert into SALES values('TV_A', 450000, '2005-03-03'); insert into SALES values('TV_B', 550000, '2005-03-10');
ProductSales:PRODUCTテーブルとSALESテーブルを結合して得られる値をつめるBean。PRICEカラムが衝突するがそれぞれ別名にする。COLUMNアノテーション使ってもいいはず
package hoge; import java.math.BigDecimal; import java.util.Date; public class ProductSales { private String name; private BigDecimal unitPrice; private BigDecimal salesPrice; private Date salesDate; public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getSalesDate() { return salesDate; } public void setSalesDate(Date salesDate) { this.salesDate = salesDate; } public BigDecimal getSalesPrice() { return salesPrice; } public void setSalesPrice(BigDecimal salesPrice) { this.salesPrice = salesPrice; } public BigDecimal getUnitPrice() { return unitPrice; } public void setUnitPrice(BigDecimal unitPrice) { this.unitPrice = unitPrice; } public String toString() { return new StringBuffer() .append("[") .append(name).append(", ") .append(unitPrice).append(", ") .append(salesPrice).append(", ") .append(salesDate).append(", ") .append("]") .toString(); } }
ProductSalesDao
package hoge; import java.util.List; public interface ProductSalesDao { public static final Class BEAN = ProductSales.class; public List getAllProductSales(); }
ProductSalesDao_getAllProductSales.sql:PRICEカラムにそれぞれ別名をつける。Beanに指定した名前と合わせる
SELECT A.name, A.price as unitprice , B.price as salesprice, B.salesdate FROM PRODUCT A LEFT OUTER JOIN SALES B ON(A.name = B.productname);