Java Hibernate中带hbm.xml的主键的强制设置器
使用HibernateXML映射配置是否可以避免主键的setter?使用注释时,不必声明setter方法。参见示例。我使用的是Hibernate版本4.1.2Java Hibernate中带hbm.xml的主键的强制设置器,java,xml,hibernate,jpa,hbm,Java,Xml,Hibernate,Jpa,Hbm,使用HibernateXML映射配置是否可以避免主键的setter?使用注释时,不必声明setter方法。参见示例。我使用的是Hibernate版本4.1.2 基于XML的配置 public class Entity { private Integer id; public Integer getId() { return id; } } <class name="Language" table="language"> <id
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>
@Entity
@Table(name="entity")
public class Entity {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
public Integer getId() {
return id;
}
}
这很好。我认为hibernate通过反射(Class.newInstance())创建对象,这就是它需要无参数构造函数的原因。这样-我看不出如何为已使用的属性省略setter。您可以将未使用的字段标记为@Transient,但仅此而已 您可以将访问类型设置为字段,这将实现与将注释放在字段上相同的功能
<class name="Language" table="language">
<id name="id" column="id" access="field">
<generator class="native" />
</id>
</class>
你需要一个setter而不是auto不,你需要一个setter-这有什么问题吗?@Woody我不想为成员声明setter,它永远不应该被应用程序更改。声明它是私有的对我来说似乎不太好。我想你们需要setter,但你们不能声明它是非公有的吗?(例如受保护的)。这只是猜测。我不是专家。@Boris Strandjev是的,我可以宣布它非公开,但为什么?它永远不会被使用。我觉得很尴尬。@krocan-你错了。它将被使用,但通过反射。如果您觉得这很尴尬,为什么在注释案例中声明一个没有setter的私有字段却没有呢?是的,Hibernate通过反射创建对象,您还可以通过反射设置私有成员,所以您不需要setter方法。无论如何,它在使用注释时可以工作。请看问题。Opps-yep-我不久前才用过一次。谢谢,这就是我要找的!
<class name="Language" table="language">
<id name="id" column="id" access="field">
<generator class="native" />
</id>
</class>
@GeneratedValue(strategy = GenerationType.IDENTITY)