它是如何获得现场价值的?不是通过现场get
方法吗?当我使用hibernate * .hbm.xml时,它总是运行字段的get
方法来获取值,但@Column
不是。@Entity
@Table(name = "rank")
public class Rank implements Serializable {
private static final long serialVersionUID = 1673403567289141704L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "rank_key")
private String key;//like 25_1508757477589
@Column(name = "data")
private String data;
@Column(name = "type")
private Integer type;
@Column(name = "date")
private Date shareDate;//this field can't get value
。
public void setShareDate(Date shareDate) {
this.shareDate = shareDate;
}
public Date getShareDate() { //get timestamp through key
String[] split = key.split("_");
Long time = Long.parseLong(split[1]);
return new Date(time);
}
}
//其他字段getter和setter
Rank.hbm.xml
当我使用shareDate
时,字段get
可以调用getShareDate
方法获取值(将运行<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="*.Rank" table="rank">
<id name="id" type="int">
<generator class="identity"/>
</id>
<property name="userId" type="int" column="user_id"></property>
<property name="key" type="string" column="rank_key"/>
<property name="data" type="string" column="data" />
<property name="type" type="int" column="type"></property>
<property name="shareDate" type="java.util.Date" column="date"></property>
</class>
</hibernate-mapping>
方法),我是否遗漏了某些内容?
def encode(self, password, salt, iterations=None):
if iterations is None:
iterations = self.iterations
# then ur code......
答案 0 :(得分:0)
有两种访问类型:属性访问和字段访问。
来自Pro JPA2 :
如果您注释字段,JPA提供程序将获取并设置字段 使用反射的实体。如果注释设置在 getter方法的属性,那些getter和setter方法都是 由提供者调用以访问和设置状态。
注释实体的字段将导致提供程序使用 字段访问以获取和设置实体的状态。吸气鬼和二传手 方法可能存在也可能不存在,但如果它们存在,则存在 被提供者忽略。
使用属性访问模式时,与JavaBeans的合同相同 适用,并且必须有getter和setter方法 持久性。
与hbm(hibernate mapping)XML相同的情况。 property元素具有access
属性。其值可以是字段或属性。如果未定义,则默认为属性。
HBM将始终覆盖注释。
现在,让我们检查您的代码。
您已在字段上添加@Column
注释(而不是在getter方法上)。在这里,您正在使用字段访问。但是,您还有一个HBM xml文件,默认情况下HBM使用属性访问,并且它会覆盖注释。最后,您使用属性访问(而不是字段访问)。这就是调用getter方法获取值的原因。否则,如果使用字段访问,则通过反射捕获值。
如果您要询问@Column
注释的目的是什么。阅读API文档。它基本上将您的实体字段/属性映射到物理表中的特定列。这是可选的,如果您不声明,则默认值将适用。有关默认值的更多信息,请参阅API。
答案 1 :(得分:0)
感谢所有观众,我已经能够获得'shareDate'属性值,我在getter函数上更改了所有JPA注释,它对我有用。但我真的想知道@Column如何获得pojo字段的价值。