我今天分配的任務是為一個頁面Debug,遇到了一個問題查詢的實體類在數據庫沒有對應的表,這時最常用的是建立視圖或者表,但是應用@Transient注釋可以讓你更簡單,免除建立表還有視圖需要找多表關聯關系的苦惱,@Transient 表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性.
如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient 后面就不要用實體去查詢了,在dao類中寫一個多表聯查。
package com.haiyisoft.entity;
import java.math.BigDecimal;
import com.haiyisoft.ep.common.db.Record;
import com.haiyisoft.ep.common.jpa.meta.EntityMetaData;
import com.haiyisoft.ep.common.jpa.util.EntityMetaDataUtil;
import com.haiyisoft.ep.common.util.PrintUtil;
import com.haiyisoft.ep.exception.BaseRunException;
import javax.persistence.*;
import com.haiyisoft.entity.EntityBean;
@Entity
@Table(name = "eai_test_person_info")
public class EaiTestPersonInfo extends EntityBean{
private static final long serialVersionUID = 1L;
@Transient
@Id
@Column(name = "Pk")
private BigDecimal pk;
@Transient
@Column(name = "account")
private String account="";
@Transient
@Column(name = "contract")
private String contract="";
@Transient
@Column(name = "name")
private String name="";
@Transient
@Column(name = "sex")
private String sex="";
@Transient
@Column(name = "address")
private String address="";
@Transient
@Column(name = "phone")
private String phone="";
@Transient
@Column(name = "email")
private String email="";
public BigDecimal getPk() {
return pk;
}
public void setPk(BigDecimal pk){
this.pk = pk;
}
public String getAccount() {
return account;
}
public void setAccount(String account){
this.account = account;
}
public String getContract() {
return contract;
}
public void setContract(String contract){
this.contract = contract;
}
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex){
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address){
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone){
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email){
this.email = email;
}
@Override
public Record exportToRecord() {
EntityMetaData metaData = EntityMetaDataUtil.getEntityMetaData(this.getClass().getName());
if (metaData == null) {
new BaseRunException("Java類"+this.getClass().getName()+"沒有元數據信息!不能導出為Record!").handle();
}
Record record = PrintUtil.genEmptyExportRecord(metaData);
record.set("Pk", this.pk);
record.set("account", this.account);
record.set("contract", this.contract);
record.set("name", this.name);
record.set("sex", this.sex);
record.set("address", this.address);
record.set("phone", this.phone);
record.set("email", this.email);
record.set("checked", super.getChecked());
return record;
}
}
