是否可以避免使用Hibernate XML映射配置的主键设置器?使用注释时,您不必声明setter方法。见例子。我正在使用Hibernate 4.1.2版。
基于XML的配置
public class Entity {
private Integer id;
public Integer getId() {
return id;
}
}
<class name="Language" table="language">
<id name="id" column="id">
<generator class="native" />
</id>
</class>
虽然抛出了初始化Hibernate异常
Caused by: org.hibernate.PropertyNotFoundException: Could not find a setter for property id in class net.kreuzman.eshop.core.domain.l10n.Language
at org.hibernate.property.BasicPropertyAccessor.createSetter(BasicPropertyAccessor.java:252)
at org.hibernate.property.BasicPropertyAccessor.getSetter(BasicPropertyAccessor.java:245)
at org.hibernate.mapping.Property.getSetter(Property.java:325)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:444)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:182)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:82)
... 49 more
基于注释的配置
@Entity
@Table(name="entity")
public class Entity {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
public Integer getId() {
return id;
}
}
这很有效。
答案 0 :(得分:3)
您可以将访问类型设置为字段,这与将注释放在字段上的效果相同。
<class name="Language" table="language">
<id name="id" column="id" access="field">
<generator class="native" />
</id>
</class>
答案 1 :(得分:0)
我认为hibernate通过反射创建对象(Class.newInstance()),这就是为什么它需要no args构造函数。那样 - 我不知道如何可以省去二手房产的二传手。你可以将未使用的字段标记为@Transient,但就是这样。
答案 2 :(得分:0)
@GeneratedValue(strategy = GenerationType.IDENTITY)
而不是自动