视图(使用nvl函数的目的在于解决hibernate在联合主键情况下,主键中有空值时造成读取的list为null的情况)
create or replace view ticket_statistical
(invoice_code,invoice_num,invoice_person,invoice_date,customer_name,identity_num,project_id,unit_price_id,sum_money,status) as
select NVL(a.invoice_code,'0'),NVL(a.invoice_num,'0'),NVL(a.invoice_person,'0'),a.invoice_date,NVL(a.customer_name,'0'),
NVL(a.identity_num,'0'),NVL(a.project_id,'0'),NVL(b.unit_price_id,'0'),NVL(a.sum_money,'0'),NVL(a.status,'0')
from ism_invoice a left join (select * from (select i.id,i.invoice_id,i.unit_price_id,Row_number() OVER (PARTITION BY i.invoice_id order by i.invoice_id) rn from ism_invoice_item i ) where rn=1) b
on a.id=b.invoice_id;
两个pojo
1.联合主键
public class TicketStatisticalViewId extends AbstractEntity implements java.io.Serializable {
private String invoice_code;
private String invoice_num;
private String invoice_person;
private Date invoice_date;
private String customer_name;
private String identity_num;
private String project_id;
private String unit_price_id;
private String sum_money;
private String status;
private User user; //开票人
private OmsProjects omsProjects; //项目
private IsmChargingUnit charging;
public String getInvoice_code() {
return invoice_code;
}
public void setInvoice_code(String invoice_code) {
this.invoice_code = invoice_code;
}
public String getInvoice_num() {
return invoice_num;
}
public void setInvoice_num(String invoice_num) {
this.invoice_num = invoice_num;
}
public Date getInvoice_date() {
return invoice_date;
}
public void setInvoice_date(Date invoice_date) {
this.invoice_date = invoice_date;
}
public String getCustomer_name() {
return customer_name;
}
public void setCustomer_name(String customer_name) {
this.customer_name = customer_name;
}
public String getIdentity_num() {
return identity_num;
}
public void setIdentity_num(String identity_num) {
this.identity_num = identity_num;
}
public String getSum_money() {
return sum_money;
}
public void setSum_money(String sum_money) {
this.sum_money = sum_money;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
/*public String getInvoice_person() {
return invoice_person;
}
public void setInvoice_person(String invoice_person) {
this.invoice_person = invoice_person;
}
public String getProject_id() {
return project_id;
}
public void setProject_id(String project_id) {
this.project_id = project_id;
}
public String getUnit_price_id() {
return unit_price_id;
}
public void setUnit_price_id(String unit_price_id) {
this.unit_price_id = unit_price_id;
}*/
public OmsProjects getOmsProjects() {
return omsProjects;
}
public void setOmsProjects(OmsProjects omsProjects) {
this.omsProjects = omsProjects;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public IsmChargingUnit getCharging() {
return charging;
}
public void setCharging(IsmChargingUnit charging) {
this.charging = charging;
}
}
整合主键
public class TicketStatisticalView extends AbstractEntity implements java.io.Serializable{
private TicketStatisticalViewId id;
public TicketStatisticalViewId getId() {
return id;
}
public void setId(TicketStatisticalViewId id) {
this.id = id;
}
}
mapping
<hibernate-mapping>
<class name="com.zhongyuan.invoice.ticket.pojo.TicketStatisticalView" table="ticket_statistical">
<synchronize table="ism_invoice"/>
<synchronize table="ism_invoice_item"/>
<composite-id name="id" class="com.zhongyuan.invoice.ticket.pojo.TicketStatisticalViewId">
<key-property name="customer_name" type="string">
<column name="customer_name"/>
</key-property>
<key-property name="identity_num" type="string">
<column name="identity_num"/>
</key-property>
<key-property name="invoice_code" type="string">
<column name="invoice_code"/>
</key-property>
<key-property name="invoice_num" type="string">
<column name="invoice_num"/>
</key-property>
<key-property name="invoice_date" type="timestamp">
<column name="invoice_date"/>
</key-property>
<key-property name="sum_money" type="string">
<column name="sum_money"/>
</key-property>
<key-property name="status" type="string">
<column name="status"/>
</key-property>
<!-- <key-property name="invoice_person" type="string">
<column name="invoice_person"/>
</key-property>
<key-property name="project_id" type="string">
<column name="project_id"/>
</key-property>
<key-property name="unit_price_id" type="string">
<column name="unit_price_id"/>
</key-property> -->
<key-many-to-one name="user" class="com.qingshu.huachen.sys.org.pojo.User">
<column name="invoice_person"></column>
</key-many-to-one>
<key-many-to-one name="omsProjects" class="com.zhongyuan.invoice.ticket.pojo.OmsProjects">
<column name="project_id"></column>
</key-many-to-one>
<key-many-to-one name="charging" class="com.zhongyuan.invoice.ticket.pojo.IsmChargingUnit">
<column name="unit_price_id"></column>
</key-many-to-one>
</composite-id>
</class>
</hibernate-mapping>
查询语句
from TicketStatisticalView b where b.id.status='1'