Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据库如何通过Hibernate与jpa注释的pojo类交互?_Java_Mysql_Hibernate_Jpa_Jpa 2.0 - Fatal编程技术网

Java 数据库如何通过Hibernate与jpa注释的pojo类交互?

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

对于JPA注释的POJO类中的getter和setter如何通过Hibernate与提议的MySQL数据库交互,我有点困惑

我理解,例如,您可以拥有以下内容:

@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值获取日期对象,那么最好的方法是使用瞬态映射函数吗

为什么自动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如何使用它)

为什么自动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)工作正常吗?我还没有实现