hibernate中annotation各标签和相对的hibernate core3中的xml对比
annotation
@Entity 和@Id最基本的功能,@Id对应的是主键的属性
@table(name="**") 当数据库表名和设置的属性名不一致时,name给出了数据库表中的名字
@Id @genertorValue 默认的是auto自增属性,可以有sequence,identity,table,前两者主要是数据库不同,选用不同。如mysql是identity,oracl是sequence,
@column(name="**")当数据库表名和设置的属性名不一致时,name给出数据库属性名,当然column还有别的用,比如:更新数据库时, @Column(updatable=false),默认是true,不让那个属性更新
@Transient让其非持久化,就是不写入数据库表中
@Temporal(TemporalType.TIME)时间date的用法,有date,time,timestamp,故名思议
@Enumerated(EnumType.STRING)枚举类型有两种,EnumType.ORDINAL,EnumType.对应int和string,取值时,
t.setZhichen(ZhiChen.B);注意注意
xml相应的比对
<class name="Teacher" table = "Teacher"> //table改相应的数据库表名,如果没有,默认和属性名一样
<id name="id" column="id" > //主键的改名
<generator class="identity"></generator>//相当于@Id @genertorValue的自增,默认为native,常用identity,sequence,uuid,前两个根据数据不同来定,后面那个生成特定的数
</id>
<property name="name" /> 不设置类型,系统会自动匹配
<!--<property name="title" />-->//屏蔽掉相当于@Transient用
<property name="date" type="timestamp"/> //时间类型的设置,这个type必须要写
</class>
枚举xml实现很复杂,不讨论
问题:今天在试验,xml自增时,老是报错org.hibernate.exception.DataException: could not insert
以及id field没设置
貌似是生成的表和后面update有冲突,把表删除,用create解决
warn提示:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
是由slf4j-api-1.5.8.jar这个是接口,log4j12-1.2.14jar,具体实现,slf4j-log4j12-1.5.8.jar,转换的包,让slf4j转成log4j,而尚学堂视频,前面例子用的是slf4j-nop-1.5.8.jar来实现日志功能,不存在转换,也没有log4j,所以不会报错。这个后面看sql语句时,log4j很有必要