JPA(一)
JAVA 2010-07-02 22:50:08 阅读74 评论0 字号:大中小 订阅
@Entity(name="Customer")//Customer:实体的名称select c from Customer c
@Table(schema="db",uniqueConstraints={
//唯一鍵
@UniqueConstraint(
columnNames = {"CUSTOMER_NAME"}
)/*,@UniqueConstraint(
columnNames = {"NAME","SHORTNAME"}
)*/
})//CUSTOMER:表名,catalog:目录名,schema:数据库
1. Sequence生成器:
@Id
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="myseq"
)
@SequenceGenerator(
name="myseq",
sequenceName="id_seq"//,initialValue=1,allocationSize=1
)
/*@Id @GeneratedValue(generator = "myseq")
@org.hibernate.annotations.GenericGenerator(
name = "myseq",
parameters = {
@org.hibernate.annotations.Parameter(
name="sequence",value="id_seq"
)},
strategy = "sequence"
)*/
@GeneratedValue(
strategy=GenerationType.TABLE,
generator="myseq"
)
@TableGenerator(
name="myseq",
table="tb_seq",
pkColumnName="gen_name",//栏位名
valueColumnName="gen_value",//栏位名
pkColumnValue="pk_tb_seq",//栏位值
allocationSize=1//,UniqueConstraint同Table一样
)
@Embeddable
public class CustomerPK implements java.io.Serializable{
private String name;
private String email;
public class Customer implements java.io.Serializable {
@EmbeddedId
private CustomerPK pk;
//@Embeddable(第一种方式)
public class SCId implements Serializable {
private Long sno; // 学号
private Long cno; // 课程号
@Id//(第一种方式) 此方式SC.java中需@Embeddable
@AttributeOverrides({
@AttributeOverride(name="sno",column=@Column(name="SNO")),
@AttributeOverride(name="cno",column=@Column(name="CNO"))
})
@EmbeddedId//此方式SC.java中无需@Embeddable(第二种方式)
@AttributeOverrides({
@AttributeOverride(name="sno",column=@Column(name="SNO")),
@AttributeOverride(name="cno",column=@Column(name="CNO"))
})
//@Transient(映射非持久化类型)
private SCId scid;
<!-- <composite-id name="scid" class="SCId"> -->
<composite-id>
<key-property name="sno" type="long">
<column name="Sno" />
</key-property>
<key-property name="cno" type="long">
<column name="Cno" />
</key-property>
</composite-id>
@Basic(fetch=FetchType.EAGER,optional=false)//LAZY:延时加载,EAGER:即时加载(default EAGER),optional表示属性是否可为空default true
@Temporal(TemporalType.DATE)//default java.sql.TIMESTAMP Temporal@转换成java.util.Date
@Column(
name="CUSTOMER_NAME",
//unique=true,//是否唯一
//nullable=false,//是否为空
//insertable=false,//是否允许insert
//updatable=false,//是否允许update
//columnDefinition="varchar2(200) not null",
length=512//precision=12,scale=2,精度为12位,小数倍数为2
)
@Enumerated(EnumType.ORDINAL)//EnumType.STRING
private CustomerType types;
public enum CustomerType {
COMPETITOR,INVESTOR,PARTNER,VENDER
}
User.java:
@OneToOne
@PrimaryKeyJoinColumn
@org.hibernate.annotations.Cascade(
value = org.hibernate.annotations.CascadeType.SAVE_UPDATE
)
private Address address;
<class name="User" table="USER">
<id name="id" type="long" column="USER_ID">
<generator class="sequence">
<param name="sequence">id_seq</param>
</generator>
</id>
<property name="loginName"/>
<property name="admin" type="yes_no"/>
<one-to-one name="address" class="Address" cascade="save-update"/>
</class>
Address.java:
@Id @GeneratedValue(generator = "myForeignGenerator")
@org.hibernate.annotations.GenericGenerator(
name = "myForeignGenerator",
strategy = "foreign",
parameters = @org.hibernate.annotations.Parameter(name = "property",value = "user")
)
@Column(name = "ADDRESS_ID")
private Long id;
@OneToOne
@PrimaryKeyJoinColumn
private User user;
<class name="Address" table="ADDRESS">
<id name="id" type="long" column="ADDRESS_ID">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<property name="street"/>
<property name="city"/>
<property name="zipcode"/>
<one-to-one name="user"