Java 数据库如何通过Hibernate与jpa注释的pojo类交互?
对于JPA注释的POJO类中的getter和setter如何通过Hibernate与提议的MySQL数据库交互,我有点困惑 我理解,例如,您可以拥有以下内容:Java 数据库如何通过Hibernate与jpa注释的pojo类交互?,java,mysql,hibernate,jpa,jpa-2.0,Java,Mysql,Hibernate,Jpa,Jpa 2.0,对于JPA注释的POJO类中的getter和setter如何通过Hibernate与提议的MySQL数据库交互,我有点困惑 我理解,例如,您可以拥有以下内容: @Entity @Table(appliesTo = "users") public class UserDM implements UserIF, Serializable { private static final long serialVersionUID = 1L; private long
@Entity
@Table(appliesTo = "users")
public class UserDM implements UserIF, Serializable {
private static final long serialVersionUID = 1L;
private long id;
private String name;
private Date createDate;
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(final String n) {
name = n;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(final long time) {
createDate = new Date(time);
}
}
- 为什么自动ID生成策略与Getter关联
- 当存储新用户时,该方法实际上是如何自动递增ID的
- 操作顺序是什么?POJO通过setter(或者可能是构造函数?)填充,然后hibernate通过getter获取信息,然后存储到db中
- 让我的“getCreateDate”方法返回一个日期是一个好主意,还是最好让POJO中的字段映射到MySQL友好的字段?如果我想从timestamp ms值获取日期对象,那么最好的方法是使用瞬态映射函数吗
Auto将为您正在使用的数据库服务器使用最佳的自动增量策略。它可以是Sybase/SQLServer的“标识”,也可以是类似Oracle的“序列”,也可以是MySQL的“自动增量”。所有这些情况的共同点是,在数据库生成ID之前,Hibernate不会知道ID。触发“插入”后,Hibernate将使用标准JDBC方法访问 操作顺序是什么?POJO通过setter(或者可能是构造函数?)填充,然后hibernate通过getter获取信息,然后存储到db中 再说一次,我不知道你想要哪一级的细节,但是是的,这是顺序。填充POJO并在EntityManager上调用persist方法,将此POJO作为参数传递。然后Hibernate将调用getter(或访问属性),并将此数据发送到数据库 让我的“getCreateDate”方法返回一个日期是一个好主意,还是最好让POJO中的字段映射到MySQL友好的字段?如果我想从timestamp ms值获取日期对象,那么最好的方法是使用瞬态映射函数吗 尽量让你的应用程序“数据库不可知”。所以,如果你真的不需要,不要让它“mysql友好”。一般来说,在用
@Temporal(TIMESTAMP)
映射的字段中使用java.util.Date就可以了,但是如果您需要更“强大”的日期/时间对象,比如Joda time,您也可以使用它(只要您告诉Hibernate如何使用它)
为什么自动ID生成策略与Getter关联
大多数情况下,这是一个品味问题。您可以将注释放在字段或访问器(getter)上,这取决于您喜欢的方式,只要它是一致的(总是在方法上,或者总是在属性上)。通过将其设置为属性,Hibernate将使用反射来访问该属性(这并不像听起来那么糟糕)。通过将其设置为方法,Hibernate将使用它而不是反射
当存储新用户时,该方法实际上是如何自动递增ID的
不确定您希望在哪一级别获得答案,但为了保持简短:Auto将为您正在使用的数据库服务器使用最佳的自动增量策略。它可以是Sybase/SQLServer的“标识”,也可以是类似Oracle的“序列”,也可以是MySQL的“自动增量”。所有这些情况的共同点是,在数据库生成ID之前,Hibernate不会知道ID。触发“插入”后,Hibernate将使用标准JDBC方法访问 操作顺序是什么?POJO通过setter(或者可能是构造函数?)填充,然后hibernate通过getter获取信息,然后存储到db中 再说一次,我不知道你想要哪一级的细节,但是是的,这是顺序。填充POJO并在EntityManager上调用persist方法,将此POJO作为参数传递。然后Hibernate将调用getter(或访问属性),并将此数据发送到数据库 让我的“getCreateDate”方法返回一个日期是一个好主意,还是最好让POJO中的字段映射到MySQL友好的字段?如果我想从timestamp ms值获取日期对象,那么最好的方法是使用瞬态映射函数吗
尽量让你的应用程序“数据库不可知”。所以,如果你真的不需要,不要让它“mysql友好”。一般来说,在用
@Temporal(TIMESTAMP)
映射的字段中使用java.util.Date就可以了,但是如果您需要更“强大”的日期/时间对象,比如Joda time,您也可以使用它(只要您告诉Hibernate如何使用它) 将帮助您更好地理解@GeneratedValue(strategy=GenerationType.AUTO)工作正常吗?我还没有实现。我正在创建健壮的Spring3应用程序,并从头开始。我仍在弄清楚这一切是如何工作的,还没有真正“尝试任何东西”,我正在为double post做准备,但为了澄清——我想知道Hibernate在看到@column注释(在字段或方法上)时会做什么。非常感谢。Hibernate将java变量与表列绑定。将帮助您更好地理解@GeneratedValue(strategy=GenerationType.AUTO)工作正常吗?我还没有实现