四、管制实体
现在你有了一个 EntityManager对象,你可以在桌面环境用它创建查询和事务处理。在你存储一个新的 Player 和 Team 实体之前,你应该开始一个事务处理。在事务处理过程中,使用实体管理器( entity manager)的 persist方法管制一个新的实体。当你持久化它们后,它们就称为了管制状态。你必须提交事务,让这些实体出现在数据库中。毫无疑问,你将会使用 begin 和commit 方法来实现这些操作。
下面的代码演示了如何创建和保存 几个Players信息和他们球队的比赛赛程。
http://www.qqread.com/java/2007/11/w381045.html public class CreatePlayersAndTeams ...{ /**//** Creates a new instance of CreatePlayersAndTeams */ public CreatePlayersAndTeams() ...{ } /**//** * @param args the command line arguments */ public static void main(String[] args) ...{ // Create the EntityManager EntityManagerFactory emf = Persistence.createEntityManagerFactory("league"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); for(Team team: teams) ...{ em.persist(team); } for(Player player: players) ...{ player.setTeam(teams[0]); teams[0].addPlayer(player); em.persist(player); } em.getTransaction().commit(); em.close(); emf.close(); } private static Player[] players = new Player[] ...{ // name, number, last quoted statement new Player("Lowe", "Derek", 23, "The sinker's been good to me."), new Player("Kent", "Jeff", 12, "I wish I could run faster."), new Player("Garciaparra", "Nomar", 5, "No, I'm not superstitious at all.") }; public static Team[] teams = new Team[] ...{ new Team("Los Angeles Dodgers", "National"), new Team("San Francisco Giants", "National"), new Team("Anaheim Angels", "American"), new Team("Boston Red Sox", "American") }; }
这些代码创建了 player和他们的球队,以及如何让这些球队比赛。一旦你创建了这些实体,你就调用了实体管理器的persist 方法。最后,一旦你创建了这些对象和调用了 persist 方法,你就通过调用 commit 方法完成了事务处理。当你完成了数据库操作,通常所有的事务之后,使用 close 方法关闭 实体管理器(entity manager)和它的 factory。
图一展示了一个 TEAM的表。既然 Team实体已经自动生成了标识符,那么在表中的前四行,从1到4的顺序就是主键的值了。
图二显示了 PLAYER表。自动生成的标识符是接着 TEAM表下来的。注意到 player每行都有一个外键值,与其球队对应。在此例子中,每个 player都属于 拥有主键值1的Dodgers队。
GlassFish应用实现实际上为你创建了 PLAYER 和 TEAM 表。一旦你使用数据库工具创建了 league数据库,如果数据库中没有这两个表的存在的话,上面的示例代码就会创建所需的实体表。当然,这种操作是可以选择的,它由 persistence.xml文件指定提供商属性 toplink.ddl-generation所决定,在下载的示例代码中你可以看到 create-tables属性值。当然,如果表存在的话,代码执行结果就向存在的表格中插入记录,并且生成很多的警告信息,告诉你存在了那些表。当你需要做改变,测试,删除表,改变代码,重复测试的时候,使用 toplink.ddl-generation属性可以自动创建表,列,和主键,缩短快速开发周期,提高生产力 。
如果是需要创建一个大型数据库,仅仅通过简单的提交持久化实体是不好的做法。你或许喜欢使用 SQL语句或者是数据库供应商自己的工具,来生成表格和其它的数据库元素。但是,持久化规范明确的描述了一条规则就是:当你将你的对象实体映射到成它们之间实体关系时,你要使用提供商实现。规范定义了实体、属性、标志符如何在数据库中建立成为表,列,主键,外键。当你在创建数据库表的时候,会用到 Java持久化API,所以你必须记住命名规约。否则,你要使用声明来重写那些缺省的设置。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Java环境安装配置 (5668篇文章)
- Java编程开发手册 (8321篇文章)
- Java API (108篇文章)
- 精通Hibernate之映射继承关系(四) (0次浏览)
- 何不将Java与.NET合二为一? (0次浏览)
- Hibernate的JNDI名称绑定分析 (0次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)





