<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="news">
<jta-data-source>java:/MySqlDS1</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
persistence-unit 节点可以有一个或多个,每个persistence-unit 节点定义了持久化内容名称、使用的数据源名称及Hibernate属性。name 属性用作设置持久化名称。jta-data-source 节点用作指定实体Bean使用的数据源名称,指定数据源名称时java:/ 前缀不能缺少,数据源名称大小写敏感。properties 节点用作指定Hibernate的各项属性,如果hibernate.hbm2ddl.auto的值设为create-drop,在实体Bean发布及卸载时将自动创建及删除相应数据库表(注意:Jboss服务器启动或关闭时会引发实体Bean的发布及卸载)。
如果你的表已经存在,并且想保留数据,发布实体bean时可以把hibernate.hbm2ddl.auto的值设为none或update,以后为了实体bean 的改动能反应到数据表,建议使用update,这样实体Bean添加一个属性时能同时在数据表增加相应字段
persistence.xml要放到META-INF文件下,并打包进JAR文件里才行。
实体bean需要在网络上传送时必须实现Serializable接口,否则将引发java.io.InvalidClassException例外。
@Entity注释指明这是一个实体Bean,每个实体Bean类映射数据库中的一个表,@Table注释的name属性指定映射的数据表名称。
实体Bean的每个实例代表数据表中的一行数据,行中的一列对应实例中的一个属性。
@Column注释定义了映射到列的所有属性,如列名是否唯一,是否允许为空,是否允许更新等,他的属性介绍如下:
•name: 映射的列名。如:映射Person表的PersonName列,可以在name属性的getName 方法上面加入
@Column(name = "PersonName"),如果不指定映射列名,容器将属性名称作为默认的映射列名。
•unique: 是否唯一
•nullable: 是否允许为空
•length: 对于字符型列,length属性指定列的最大字符长度
•insertable: 是否允许插入
•updatable: 是否允许更新
•columnDefinition: 定义建表时创建此列的DDL
•secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
@Id 注释指定personid属性为表的主键,它可以有多种生成方式:
•TABLE:容器指定用底层的数据表确保唯一。
•SEQUENCE:使用数据库的SEQUENCE 列来保证唯一
•IDENTITY:使用数据库的INDENTIT列来保证唯一
•AUTO:由容器挑选一个合适的方式来保证唯一
•NONE:容器不负责主键的生成,由调用程序来完成。
@GeneratedValue注释定义了标识字段的生成方式
在将通过JNDI获得的Home或者LocalHome接口进行 PortableRemoteObject.narrow或者强制转换为LocalHome的时候,会出现 java.lang.ClassCastException异常。
解决办法
文件D:\jboss\server\all\deploy\jboss-web.deployer\META-INF\jboss-service.xml
修改第43行
<attribute name="UseJBossWebLoader">false</attribute>为<attribute name="UseJBossWebLoader">true</attribute>
原因分析
修改前:JBoss使用了Tomcat的Class Loader来加载Web应用的类
修改后:JBoss使用JBoss统一的Class Loader来加载Web应用的类 ssCastException
http://hi.baidu.com/43840397/blog/item/c17cb40fe583abe236d122de.html 蔡越锐