java技術

          hibernate spring struts

          BlogJava 聯系 聚合 管理
            18 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

          1.設置Pojo為實體

          01.@Entity //標識這個pojo是一個jpa實體   
          02.public class Users implements Serializable {   
          03.}  

          2.設置表名

          01.@Entity   
          02.@Table(name = "users") //指定表名為users   
          03.public class Users implements Serializable {   
          04.}  

          3.設置主鍵

          01.public class Users implements Serializable {   
          02.@Id   
          03.private String userCode;  

          4. 設置字段類型
          通過@Column注解設置,包含的設置如下
          .name:字段名
          .unique:是否唯一
          .nullable:是否可以為空
          .inserttable:是否可以插入
          .updateable:是否可以更新
          .columnDefinition: 定義建表時創建此列的DDL
          .secondaryTable: 從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字。

          01.@Column(name = "user_code", nullable = false, length=32)//設置屬性userCode對應的字段為user_code,長度為32,非空   
          02.private String userCode;   
          03.@Column(name = "user_wages", nullable = true, precision=12, scale=2)//設置屬性wages對應的字段為user_wages,12位數字可保留兩位小數,可以為空   
          04.private double wages;   
          05.@Temporal(TemporalType.DATE)//設置為時間類型   
          06.private Date joinDate;  

          5.字段排序
          在加載數據的時候可以為其指定順序,使用@OrderBy注解實現

          01.@Table(name = "USERS")   
          02.public class User {   
          03.@OrderBy(name = "group_name ASC, name DESC")   
          04.private List books = new ArrayList();   
          05.}  

          6.主鍵生成策略

          01.public class Users implements Serializable {   
          02.@Id   
          03.@GeneratedValue(strategy=GenerationType.IDENTITY)//主鍵自增,注意,這種方式依賴于具體的數據庫,如果數據庫不支持自增主鍵,那么這個類型是沒法用的   
          04.@Column(name = "user_id", nullable = false)   
          05.private int userId;   
          06. 
          07. 
          08.public class Users implements Serializable {   
          09.@Id   
          10.@GeneratedValue(strategy=GenerationType.TABLE)//通過一個表來實現主鍵id的自增,這種方式不依賴于具體的數據庫,可以解決數據遷移的問題   
          11.@Column(name = "user_code", nullable = false)   
          12.private String userCode;   
          13. 
          14. 
          15.public class Users implements Serializable {   
          16.@Id   
          17.@GeneratedValue(strategy=GenerationType.SEQUENCE)//通過Sequence來實現表主鍵自增,這種方式依賴于數據庫是否有SEQUENCE,如果沒有就不能用   
          18.@SequenceGenerator(name="seq_user")   
          19.@Column(name = "user_id", nullable = false)   
          20.private int userId;  

          7.一對多映射關系
          有T_One和T_Many兩個表,他們是一對多的關系,注解范例如下
          主Pojo

          01.@Entity   
          02.@Table(name = "T_ONE")   
          03.public class One implements Serializable {   
          04.private static final long serialVersionUID = 1L;   
          05.@Id   
          06.@Column(name = "ONE_ID", nullable = false)   
          07.private String oneId;   
          08.@Column(name = "DESCRIPTION")   
          09.private String description;   
          10.@OneToMany(cascade = CascadeType.ALL, mappedBy = "oneId")//指向多的那方的pojo的關聯外鍵字段   
          11.private Collection<Many> manyCollection;   

          子Pojo

          01.@Entity   
          02.@Table(name = "T_MANY")   
          03.public class Many implements Serializable {   
          04.private static final long serialVersionUID = 1L;   
          05.@Id   
          06.@Column(name = "MANY_ID", nullable = false)   
          07.private String manyId;   
          08.@Column(name = "DESCRIPTION")   
          09.private String description;   
          10. 
          11.@JoinColumn(name = "ONE_ID", referencedColumnName = "ONE_ID")//設置對應數據表的列名和引用的數據表的列名   
          12.@ManyToOne//設置在“一方”pojo的外鍵字段上   
          13.private One oneId;   

          8.多對多映射關系
          貌似多對多關系不需要設置級聯,以前用hibernate的時候著實為多對多的級聯頭疼了一陣子,JPA的多對多還需要實際的嘗試一下才能有所體會。
          估計JPA的多對多也是可以轉換成兩個一對多的。

          第一個Pojo

          01.@Entity   
          02.@Table(name = "T_MANYA")   
          03.public class ManyA implements Serializable {   
          04.private static final long serialVersionUID = 1L;   
          05.@Id   
          06.@Column(name = "MANYA_ID", nullable = false)   
          07.private String manyaId;   
          08.@Column(name = "DESCRIPTION")   
          09.private String description;   
          10.@ManyToMany   
          11.@JoinTable(name = "TMANY1_TMANY2", joinColumns = {@JoinColumn(name = "MANYA_ID", referencedColumnName = "MANYA_ID")}, inverseJoinColumns = {@JoinColumn(name = "MANYB_ID", referencedColumnName = "MANYB_ID")})   
          12.private Collection<ManyB> manybIdCollection;   

          第二個Pojo

          01.@Entity   
          02.@Table(name = "T_MANYB")   
          03.public class ManyB implements Serializable {   
          04.private static final long serialVersionUID = 1L;   
          05.@Id   
          06.@Column(name = "MANYB_ID", nullable = false)   
          07.private String manybId;   
          08.@Column(name = "DESCRIPTION")   
          09.private String description;   
          10.@ManyToMany(mappedBy = "manybIdCollection")   
          11.private Collection<ManyA> manyaIdCollection;   

          9.一對一映射關系
          主Pojo

          01.@Entity   
          02.@Table(name = "T_ONEA")   
          03.public class OneA implements Serializable {   
          04.private static final long serialVersionUID = 1L;   
          05.@Id   
          06.@Column(name = "ONEA_ID", nullable = false)   
          07.private String oneaId;   
          08.@Column(name = "DESCRIPTION")   
          09.private String description;   
          10.@OneToOne(cascade = CascadeType.ALL, mappedBy = "oneA")//主Pojo這方的設置比較簡單,只要設置好級聯和映射到從Pojo的外鍵就可以了。   
          11.private OneB oneB;  
          從Pojo

          01.@Entity   
          02.@Table(name = "T_ONEB")   
          03.public class OneB implements Serializable {   
          04.private static final long serialVersionUID = 1L;   
          05.@Id   
          06.@Column(name = "ONEA_ID", nullable = false)   
          07.private String oneaId;   
          08.@Column(name = "DESCRIPTION")   
          09.private String description;   
          10.@JoinColumn(name = "ONEA_ID", referencedColumnName = "ONEA_ID", insertable = false, updatable = false)//設置從方指向主方的關聯外鍵,這個ONEA_ID其實是表T_ONEA的主鍵   
          11.@OneToOne   
          12.private OneA oneA;   

          10 大字段

          01.@Lob //對應Blob字段類型   
          02.@Column(name = "PHOTO")   
          03.private Serializable photo;   
          04.@Lob //對應Clob字段類型   
          05.@Column(name = "DESCRIPTION")   
          06.private String description;  

          11.瞬時字段
          不需要與數據庫映射的字段,在保存的時候不需要保存倒數據庫

          01.@Transient   
          02.private int tempValue;   
          03. 
          04.public int getTempValue(){   
          05.get tempValue;   
          06.}   
          07. 
          08.public void setTempValue(int value){   
          09.this.tempValue = value;   
          10.}

          posted on 2009-11-05 12:19 just 閱讀(513) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 土默特右旗| 张家界市| 尤溪县| 镇江市| 潞城市| 海晏县| 阳山县| 通辽市| 贡觉县| 饶平县| 从江县| 吴忠市| 辛集市| 昆山市| 诸城市| 屏南县| 孟州市| 岳阳县| 仙游县| 尚志市| 广西| 剑川县| 沅江市| 永安市| 临城县| 日土县| 南丰县| 高清| 华宁县| 中江县| 明水县| 长阳| 宁海县| 阿克陶县| 来宾市| 天津市| 通化市| 池州市| 荔浦县| 安西县| 崇仁县|