创建完persistence.xml后,需要对数据库中表进行entity映射,当然,也可以不事先创建表,使用在persistence中的配置来自动创建数据库中的表。我创建了两个实体entity,这两个实体entity我已经在数据库中事先创建好表和他们对应。
testuser类 import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.Cacheable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import com.tao3c.dao.impl.TestUserDaoImpl; @Entity @Table(name = "test_user") @Cacheable @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "com.XXX.entity.TestUserEntity") @NamedQueries({ @NamedQuery(name=TestUserDaoImpl.QUERY_GETALLTESTUSER,query=TestUserDaoImpl.TESTUSER_GETALLUSER), @NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERBYCONDITION,query=TestUserDaoImpl.TESTUSER_GETUSERBYCONDITION), @NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERNORELATIONJOIN,query=TestUserDaoImpl.TESTUSER_GETNORELATIONJOIN) }) public class TestUserEntity extends AbstractBaseEntity { private static final long serialVersionUID = -7139178611703146047L; public TestUserEntity(){ this.emails = new HashSet<TestEmailEntity>(); } /** * int TestUserEntity.java $id值 */ @Id @TableGenerator(name = "TestUserGenerator", table = "id_testuser", pkColumnName = "GEN_KEY", pkColumnValue = "com.tao3c.testuser", valueColumnName = "GEN_VALUE", allocationSize = 10, initialValue = 11) @GeneratedValue(strategy = GenerationType.TABLE, generator = "TestUserGenerator") @Column(name = "id", unique = true, nullable = false) private int id; @Column(name = "name") private String name; @Temporal(TemporalType.DATE) private Date regtime; @OneToMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.REMOVE,CascadeType.MERGE},mappedBy="testuser") private Set<TestEmailEntity> emails; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getRegtime() { return regtime; } public void setRegtime(Date regtime) { this.regtime = regtime; } public Set<TestEmailEntity> getEmails() { return emails; } public void setEmails(Set<TestEmailEntity> emails) { this.emails = emails; } public void addTestEmail(TestEmailEntity entity){ this.emails.add(entity); } }
testemails类 import javax.persistence.Cacheable; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @Entity @Table(name="test_emails") @Cacheable @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "com.XXX.entity.TestUserEntity") public class TestEmailEntity { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name="id") private int id; @Column(name="userid") private int userid; @Column(name="emailname") private String emailname; @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.REMOVE},optional=false) @JoinColumn(name="user_id") private TestUserEntity testuser; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getEmailname() { return emailname; } public void setEmailname(String emailname) { this.emailname = emailname; } public TestUserEntity getTestuser() { return testuser; } public void setTestuser(TestUserEntity testuser) { this.testuser = testuser; } }
首先说明下,在testuser类中可以存在多个testemail 用来测试jpa的一对多和多对已的关系。
在testuser中
@Entity @Table(name = "test_user") @Cacheable @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL, region = "com.XXX.entity.TestUserEntity") @NamedQueries({ @NamedQuery(name=TestUserDaoImpl.QUERY_GETALLTESTUSER,query=TestUserDaoImpl.TESTUSER_GETALLUSER), @NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERBYCONDITION,query=TestUserDaoImpl.TESTUSER_GETUSERBYCONDITION), @NamedQuery(name=TestUserDaoImpl.QUERY_GETTESTUSERNORELATIONJOIN,query=TestUserDaoImpl.TESTUSER_GETNORELATIONJOIN) })
entity声明这是一个实体类,table声明了数据库中表的名称,如果不使用缓存策略的话可以将cacheable和cache去除,在cache中的region声明了缓存策略,这是在配置文件中配置的。namedqueries中事先定义了所要使用的sql,在查询中是使用类似于这样的语句进行查询
Query query = entityManager.createNamedQuery(QUERY_GETTESTUSERBYCONDITION);
同样也可以使用原生的jpql进行查询,直接使用jpql进行查询使代码看起来不简洁,对以后的维护不利。
/** * int TestUserEntity.java $id值 */ @Id @TableGenerator(name = "TestUserGenerator", table = "id_testuser", pkColumnName = "GEN_KEY", pkColumnValue = "com.tao3c.testuser", valueColumnName = "GEN_VALUE", allocationSize = 10, initialValue = 11) @GeneratedValue(strategy = GenerationType.TABLE, generator = "TestUserGenerator") @Column(name = "id", unique = true, nullable = false) private int id;
在这里id声明了entity的主键,TableGenerator对应于GeneratedValue中的generator,因为使用的主键生成策略是GenerationType.TABlE 既它的id键值是通过数据库中的一个表来生成的,这个你表的名字为id_testuser 该表有两个字段分别为gen_key 和gen_value 其实这个表中只需要一列就可以了, gen_key的值变为com.tao3c.testuser,gen_value的起始值为11,如果在这个表中没有11这一行,那么hibernate的实现中对initValue值是不起作用的这就需要自己手动的将该行插入到表中,设置gen_value的值为11,allocationSize 为每次取出多少的id值供后续使用,该属性不能取的太大,如果你频繁重启服务器的话,就会使id的值以allocationSize间隔跳跃。
@Temporal(TemporalType.DATE) private Date regtime;
为时间字段的映射
.......后续的内容在写了,先干活l
发表评论
-
近三天jpa的总结
2011-11-25 10:25 803最近由于项目的需要,学习了下jap,以下就简单记录下最近这两天 ... -
ant 的一个构建demo
2011-11-16 19:03 7842011-11-16 ant 构建的一个demo buil ... -
myeclipse -----ant
2011-11-16 16:07 726myeclipse 已经集成了ant环境 如果需要自己的工程使 ... -
spring 配置文件路径介绍
2011-11-01 12:01 862http://www.docin.com/p-18873813 ... -
hashtable concurrenthashmap
2011-10-28 10:32 818concurrenthashmap 是对hash表的桶进行加锁 ... -
mysql migration tools 中 ojdbc的位置
2011-10-14 13:26 896使用mysql migration tool 迁移oracle ... -
近期学习计划
2011-10-14 10:51 6501 spring 源代码------工作 2 数据挖掘--- ... -
myeclipse svn 更改密码
2011-10-13 18:51 896svn的密码有时候需要更改,在myeclipse中没有更改项, ... -
win7 qc 的安装
2011-10-11 14:11 1569win7中qc的安装 1. 关闭UAC (User Ac ...
相关推荐
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143720369 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
CPPC++_更好的Windows字体渲染
10018
cppc++
二环北路东段欣心家园小区商业B段(中石油加油站东邻).m4a
cppc++
C2005
Python课程设计之高校教务系统
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
10023
使用QUndoStack撤销栈实现QTreeWidget删除item及撤销、重做
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
Python课程设计之飞机大战3.zip
SpringBoot分布式事务
CPPC++_tensorort for yolo系列YOLOv10YOLOv9YOLOv8YOLOv7YOLOv6Y
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
收录了「IT无知君」CSDN博客中涉及的Java项目源码,还有许多的开发工具类,都是我自己在用在不断维护的,需要请进!
CPPC++_更新你的CFW作弊码固件,更直接地从你的任天堂交换机
test-dadfateq