关于学习VB和ASP关系问题
2005-11-21 18:02
525 查看
今天有时间大体看了一下Hibernate Annotations,决定放弃xdoclet生成hbm的想法,开始学习annotation.
首先大体的来看一下:
一:Class Level:
1:通过@Entity声明当前pojo为实体Bean
2:通过@Table定义对应数据库表的属性
name:表名,默认实体类名
uniqueConstraints:定义表的唯一性约束
例:定义表名为tb_user,并且用户名唯一,不能重复
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Entity
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Table(
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
name = "tb_user",
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
uniqueConstraints =
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.iteye.com/Images/dot.gif)
{@UniqueConstraint(columnNames = "userName")}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public class User implements Serializable
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Integer id;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
二:Method Level:
@Basic
@Transient
@Column
所有非static非transient都会被持久化,也就是说所有加@Transient是不会被保存到数据库中的,所有没有加注的默认为@Basic,通过Column我们可以更一步的定义列名,是否为空,长度,是否可更新等等属性值,
例:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Column(name = "userName", nullable = false, length = 80, unique = true)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public String getUserName()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public void setUserName(String userName)
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
this.userName = userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Transient
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public String getPassword()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return password;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}默认的列名就是属性名,上面的name="userName"只是演示而已。
password加注为@Transient,所以通过SchemaExport导入Schema,查看表结构是没有这个字段的。
@Temporal
日期类型,分三种,Time,Date,Timestamp
例:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Temporal(TemporalType.TIMESTAMP)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Date getBirthday()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return birthday;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
@Lob
1:所有的Clob,Character,char,String都会被转为Clob
2:所有的Blob,Byte[],byte[],serializable都会被转为Blob
例:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Clob getResume()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return resume;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Blob getImage()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return image;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
@Id
就是标识了,暂时还没有详读文档,看了一下test
最简单方式如下:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Id
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@GeneratedValue
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public String getId()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
我看了一下mysql生成的sql
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
id integer not null auto_increment,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
primary key (id),
应该是hibernate根据数据库类型自动选择的(说了一句废话
![](http://www.iteye.com/Emoticons/QQ/14.gif)
),我猜是生成方式native
当然我们可以根据我们需要选择其他的生成方式,例如常用的uuid
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Id
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@GeneratedValue(generator = "system-uuid")
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@GenericGenerator(name = "system-uuid", strategy = "uuid")
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Integer getId()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
@Version
乐观锁
三:跑起来
和Hibernate官方网站一样,来个HibernateUtil
![](http://www.iteye.com/Emoticons/teeth_smile.gif)
/**
* @author martin
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
AnnotationConfiguration cfg =
new AnnotationConfiguration().addAnnotatedClass(User.class);
new SchemaExport(cfg).execute(true, true, false, true);
sessionFactory = cfg.buildSessionFactory();
}
public static Session getSession() {
return sessionFactory.openSession();
}
}
注意这里的 new AnnotationConfiguration()!
Test:
/**
* @author martin
*/
public class HibernateUtilTest extends TestCase {
public void testAddUser() {
User user = new User();
user.setUserName("martin");
save(user);
assertNotNull(user.getId());
}
public void testUpdateUser() {
Session session = HibernateUtil.getSession();
Query query =
session.createQuery("from User as user where user.userName=:name");
query.setParameter("name", "martin");
List list = query.list();
session.close();
assertEquals(1, list.size());
User user = (User) list.get(0);
user.setUserName("martin xus");
save(user);
assertEquals(new Integer(1), user.getVersion());
}
private void save(User user) {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.saveOrUpdate(user);
session.flush();
tx.commit();
session.close();
}
}
创建的表结构为:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
create table tb_user (
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
id varchar(32) not null,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
birthday datetime,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
resume text,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
image blob,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
optlock integer,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
password varchar(255),
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
userName varchar(80) not null unique,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
primary key (id),
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
unique (userName)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
)
完整User代码(省掉了所有属性的setter):
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import org.hibernate.annotations.GenericGenerator;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import javax.persistence.*;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.io.Serializable;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.util.Date;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.sql.Clob;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.sql.Blob;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
/** *//**
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
* @author martin
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Entity
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Table(
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
name = "tb_user",
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
uniqueConstraints =
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.iteye.com/Images/dot.gif)
{@UniqueConstraint(columnNames = "userName")}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public class User implements Serializable
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String id;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String userName;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String password;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Date birthday;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Clob resume;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Blob image;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Integer version;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Id
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@GeneratedValue(generator = "system-uuid")
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@GenericGenerator(name = "system-uuid", strategy = "uuid")
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Column(length = 32)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public String getId()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Column(nullable = false, length = 80, unique = true)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public String getUserName()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public String getPassword()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return password;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Temporal(TemporalType.TIMESTAMP)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Date getBirthday()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return birthday;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Version
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Column(name = "optlock")
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Integer getVersion()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return version;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Clob getResume()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return resume;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Blob getImage()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return image;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
//setter
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
四:next,明天的学习计划.
参考
Hibernate Annotations Refrence
首先大体的来看一下:
一:Class Level:
1:通过@Entity声明当前pojo为实体Bean
2:通过@Table定义对应数据库表的属性
name:表名,默认实体类名
uniqueConstraints:定义表的唯一性约束
例:定义表名为tb_user,并且用户名唯一,不能重复
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Entity
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Table(
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
name = "tb_user",
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
uniqueConstraints =
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.iteye.com/Images/dot.gif)
{@UniqueConstraint(columnNames = "userName")}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public class User implements Serializable
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Integer id;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
二:Method Level:
@Basic
@Transient
@Column
所有非static非transient都会被持久化,也就是说所有加@Transient是不会被保存到数据库中的,所有没有加注的默认为@Basic,通过Column我们可以更一步的定义列名,是否为空,长度,是否可更新等等属性值,
例:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Column(name = "userName", nullable = false, length = 80, unique = true)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public String getUserName()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public void setUserName(String userName)
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
this.userName = userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Transient
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public String getPassword()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return password;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}默认的列名就是属性名,上面的name="userName"只是演示而已。
password加注为@Transient,所以通过SchemaExport导入Schema,查看表结构是没有这个字段的。
@Temporal
日期类型,分三种,Time,Date,Timestamp
例:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Temporal(TemporalType.TIMESTAMP)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Date getBirthday()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return birthday;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
@Lob
1:所有的Clob,Character,char,String都会被转为Clob
2:所有的Blob,Byte[],byte[],serializable都会被转为Blob
例:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Clob getResume()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return resume;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Blob getImage()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return image;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
@Id
就是标识了,暂时还没有详读文档,看了一下test
最简单方式如下:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Id
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@GeneratedValue
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public String getId()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
我看了一下mysql生成的sql
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
id integer not null auto_increment,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
primary key (id),
应该是hibernate根据数据库类型自动选择的(说了一句废话
![](http://www.iteye.com/Emoticons/QQ/14.gif)
),我猜是生成方式native
当然我们可以根据我们需要选择其他的生成方式,例如常用的uuid
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Id
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@GeneratedValue(generator = "system-uuid")
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@GenericGenerator(name = "system-uuid", strategy = "uuid")
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public Integer getId()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
@Version
乐观锁
三:跑起来
和Hibernate官方网站一样,来个HibernateUtil
![](http://www.iteye.com/Emoticons/teeth_smile.gif)
/**
* @author martin
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
AnnotationConfiguration cfg =
new AnnotationConfiguration().addAnnotatedClass(User.class);
new SchemaExport(cfg).execute(true, true, false, true);
sessionFactory = cfg.buildSessionFactory();
}
public static Session getSession() {
return sessionFactory.openSession();
}
}
注意这里的 new AnnotationConfiguration()!
Test:
/**
* @author martin
*/
public class HibernateUtilTest extends TestCase {
public void testAddUser() {
User user = new User();
user.setUserName("martin");
save(user);
assertNotNull(user.getId());
}
public void testUpdateUser() {
Session session = HibernateUtil.getSession();
Query query =
session.createQuery("from User as user where user.userName=:name");
query.setParameter("name", "martin");
List list = query.list();
session.close();
assertEquals(1, list.size());
User user = (User) list.get(0);
user.setUserName("martin xus");
save(user);
assertEquals(new Integer(1), user.getVersion());
}
private void save(User user) {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.saveOrUpdate(user);
session.flush();
tx.commit();
session.close();
}
}
创建的表结构为:
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
create table tb_user (
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
id varchar(32) not null,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
birthday datetime,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
resume text,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
image blob,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
optlock integer,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
password varchar(255),
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
userName varchar(80) not null unique,
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
primary key (id),
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
unique (userName)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
)
完整User代码(省掉了所有属性的setter):
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import org.hibernate.annotations.GenericGenerator;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import javax.persistence.*;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.io.Serializable;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.util.Date;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.sql.Clob;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
import java.sql.Blob;
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
/** *//**
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
* @author martin
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Entity
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
@Table(
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
name = "tb_user",
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
uniqueConstraints =
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.iteye.com/Images/dot.gif)
{@UniqueConstraint(columnNames = "userName")}
![](http://www.iteye.com/Images/OutliningIndicators/None.gif)
)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedBlock.gif)
public class User implements Serializable
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String id;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String userName;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private String password;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Date birthday;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Clob resume;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Blob image;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
private Integer version;
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Id
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@GeneratedValue(generator = "system-uuid")
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@GenericGenerator(name = "system-uuid", strategy = "uuid")
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Column(length = 32)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public String getId()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return id;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Column(nullable = false, length = 80, unique = true)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public String getUserName()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return userName;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public String getPassword()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return password;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Temporal(TemporalType.TIMESTAMP)
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Date getBirthday()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return birthday;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Version
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Column(name = "optlock")
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Integer getVersion()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return version;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Clob getResume()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return resume;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
@Lob
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.iteye.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public Blob getImage()
![](http://www.iteye.com/Images/dot.gif)
{
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
return image;
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.iteye.com/Images/OutliningIndicators/InBlock.gif)
//setter
![](http://www.iteye.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
四:next,明天的学习计划.
参考
Hibernate Annotations Refrence
相关文章推荐
- 关于asp.net 2.0 入门学习之“GlobalResources与Callback问题”的笔记
- 关于asp.net 2.0 入门学习之“GlobalResources与Callback问题”的笔记
- 关于asp:ScriptManager与Script代码块的位置关系问题
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- [ 急AspNetPager DataList 分页问题]关于分页问题,提问的的确不少,本不想发的,因为有例子,这里奉献给初学[WEB学习实例]
- 我遇到了第一个问题,关于学习asp.net的基础
- 关于asp.net Session丢失问题的总结
- 今天研究了一下关于Asp.net文件上传时的内存消耗问题
- 关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题
- 关于ASP.NET与CLR相互关系的一些总结
- ASP.NET关于Session_End触发与否的问题
- Java学习笔记1——关于Scanner类中nextDouble、nextInt、……等方法与nextLine方法联用的问题
- 个人学习笔记8之--关于OVER子句 多属性的比较 PIVOT 聚合问题
- 关于ASP.NET控件不显示中文的问题
- 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案
- java学习心得:关于对象与引用变量的关系的理解
- 关于ASP.NET中独立页面设置身份认证等问题
- ios学习之 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- ASP.NET&C#学习笔录3(关于vs2005、vs2008和vs2010项目互转的总结 )
- 关于asp.net中cookie在调试过程中读写正常发布后乱码问题