我知道这很奇怪,但我遇到了这个问题。 我有一个简单的pojo类并使用struts + hibernate,我通过JPA更新oracle表。我使用的唯一棘手的事情是oracle序列 在每个插入查询之前调用。
但是当我使用hbm.xml文件时,与注释映射相比,它给出的结果非常快。我想切换到注释,任何人都可以知道原因是什么。
hbm.xml文件是那样的
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.myproject.VersionSequence"
table="Version_Sequence"
dynamic-update="true">
<meta attribute="sync-DAO">false</meta>
<id name="id" column="ID" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">Oracle_Sequence</param>
</generator>
</id>
<property name="version" column="VERSION" type="java.lang.Long" not-null="true" />
.
.
.
.
</class>
</hibernate-mapping>
上述xml文件的注释对应文件
@Entity
@Table(name="Version_Sequence")
public class VersionSequence implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "Oracle_Sequence")
@GenericGenerator(name = "Oracle_Sequence",
strategy = "sequence-identity",
parameters = { @Parameter(name = "sequence", value = "Oracle_Sequence") })
@Column(name = "ID")
private Long id;
@Column(name = "VERSION")
private Long version;
.
.
.
// getter/seeters
}
答案 0 :(得分:1)
首先,我们需要了解注释的工作原理。
示例 -
@GenericGenerator的定义
应用的注释是@Retention(RUNTIME),这意味着注释应该可以在运行时进行反射。
注释使用反射和反射很慢。
为什么反思很慢?
当您进行反思时,每一步都会得到验证。
例如,当你调用一个方法时,它需要检查目标是否实际上是方法的声明者的一个实例,你是否有正确数量的参数,每个参数是否是正确的类型,等
注释基于反射。