使用 Hibernate時,可以由POJO生産出hbm.xml映射檔案和資料庫,前提是必須在POJO中使用XDoclet.的@Hibernate.Tags插件.(或JDK5的注解)
與XDoclet 1 不同,XDoclet 2在Codehaus.org上,
! XDoclet 2顯式地支援複合主鍵.
簡單的使用介紹在Hibernate的文檔中可見: http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#mapping-xdoclet
詳細的tag說明
X1: http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html
X2: http://xdoclet.codehaus.org/HibernateTags
續:POJO--XDoclet 1--hbm.xml的過程中,如果表具有複合主鍵,标簽要怎麼寫?
環境:MyEclipse 5.0GA中包含的XDoclet插件版本仍僅支援XDoclet 1,為了不增加額外的插件,就用它了;
解決方法紀要:
我在通用報表系統5.0設計器的開發中使用XDoclet來生成Hibernate映射檔案,遇到了複合主鍵的問題。在具有複合主鍵的情況下,我的POJO采用一個主鍵Bean的方式加一個屬性Bean的方式,(因為X1的@hinernate.id 在每個class中最多隻能有一個,多于1的會自動忽略)也即“Components as composite identifiers” 方式。這方面的資料實在太少,東查西找,沒有解決,又連猜帶蒙,試驗了幾十遍才搞定了,哀啊!怎麼文檔這麼殘呢!
關于如何在Myeclipse中使用xdoclet就不提了,把兩個POJO貼出來,一切就清楚了:
package cn.tohot.grs5.po;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import java.math.BigDecimal;
public class TestDetailPO
{
private cn.tohot.grs5.po.TestDetailPK pk ;
public cn.tohot.grs5.po.TestDetailPK getPk ()
{
return pk;
}
public void setPk ( cn.tohot.grs5.po.TestDetailPK pk )
{
this .pk = pk;
}
private String goods;
private BigDecimal qty;
private BigDecimal price;
private BigDecimal amt;
private String orderNo;
public String getGoods ()
{
return goods;
}
public void setGoods ( String goods )
{
this .goods = goods;
}
public BigDecimal getQty ()
{
return qty;
}
public void setQty ( BigDecimal qty )
{
this .qty = qty;
}
public BigDecimal getPrice ()
{
return price;
}
public void setPrice ( BigDecimal price )
{
this .price = price;
}
public BigDecimal getAmt ()
{
return amt;
}
public void setAmt ( BigDecimal amt )
{
this .amt = amt;
}
public String getOrderNo ()
{
return orderNo;
}
public void setOrderNo ( String orderNo )
{
this .orderNo = orderNo;
}
public String toString()
{
return ToStringBuilder.reflectionToString( this ,
ToStringStyle.MULTI_LINE_STYLE);
}
public boolean equals(Object o)
{
return EqualsBuilder.reflectionEquals( this , o);
}
public int hashCode()
{
return HashCodeBuilder.reflectionHashCode( this );
}
}
package cn.tohot.grs5.po;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import java.io.Serializable;
public class TestDetailPK implements Serializable
{
// private static final long serialVersionUID ;
private Integer lineNo;
private String id;
public Integer getLineNo ()
{
return lineNo;
}
public void setLineNo ( Integer lineNo )
{
this .lineNo = lineNo;
}
public String getId ()
{
return id;
}