信息化 频道

developerWorks



四、管制实体
 
现在你有了一个 EntityManager对象,你可以在桌面环境用它创建查询和事务处理。在你存储一个新的 Player 和 Team 实体之前,你应该开始一个事务处理。在事务处理过程中,使用实体管理器( entity manager)的 persist方法管制一个新的实体。当你持久化它们后,它们就称为了管制状态。你必须提交事务,让这些实体出现在数据库中。毫无疑问,你将会使用 begin 和commit 方法来实现这些操作。
 
下面的代码演示了如何创建和保存 几个Players信息和他们球队的比赛赛程。

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的顺序就是主键的值了。



图一:Team实体变缺省映射为TEAM
 
图二显示了 PLAYER表。自动生成的标识符是接着 TEAM表下来的。注意到 player每行都有一个外键值,与其球队对应。在此例子中,每个 player都属于 拥有主键值1的Dodgers队。



图二:player表中每行都有一个外键TEAM_ID
 
GlassFish应用实现实际上为你创建了 PLAYER 和 TEAM 表。一旦你使用数据库工具创建了 league数据库,如果数据库中没有这两个表的存在的话,上面的示例代码就会创建所需的实体表。当然,这种操作是可以选择的,它由 persistence.xml文件指定提供商属性 toplink.ddl-generation所决定,在下载的示例代码中你可以看到 create-tables属性值。当然,如果表存在的话,代码执行结果就向存在的表格中插入记录,并且生成很多的警告信息,告诉你存在了那些表。当你需要做改变,测试,删除表,改变代码,重复测试的时候,使用 toplink.ddl-generation属性可以自动创建表,列,和主键,缩短快速开发周期,提高生产力 。
 
如果是需要创建一个大型数据库,仅仅通过简单的提交持久化实体是不好的做法。你或许喜欢使用 SQL语句或者是数据库供应商自己的工具,来生成表格和其它的数据库元素。但是,持久化规范明确的描述了一条规则就是:当你将你的对象实体映射到成它们之间实体关系时,你要使用提供商实现。规范定义了实体、属性、标志符如何在数据库中建立成为表,列,主键,外键。当你在创建数据库表的时候,会用到 Java持久化API,所以你必须记住命名规约。否则,你要使用声明来重写那些缺省的设置。
0
相关文章