【问题标题】:How annotation mapping is done in java persistence?java持久化中注解映射是如何完成的?
【发布时间】:2010-12-10 02:02:26
【问题描述】:

我们使用注解将实体类映射到数据库表,只需指定@Entity 和更多类似@Id、表连接和许多东西。我不知道这些实体变量是如何与数据库表映射的。谁能给个简短的描述以便理解。

谢谢:)

【问题讨论】:

    标签: java hibernate jpa annotations


    【解决方案1】:

    这个想法是将您的对象及其与其他对象的连接转换为关系数据库。这两种表示数据的方式(由类和数据库中的表定义的对象)不直接兼容,这就是所谓的Object Relational Mapper 框架发挥作用的地方。 所以像

    这样的类
    class MyObject
    {
        private String name;
        private int age;
        private String password;
    
        // Getters and setters
    }
    

    将转换为包含 varchar 类型的列名、int 类型的年龄和 varchar 类型的密码的数据库表。

    Java 中的注解只是将附加信息(所谓的元数据)添加到您的类定义中,任何其他类(例如 JavaDoc)都可以读取这些信息,并且在 Java Persistence API 的情况下,将由 ORM 框架使用,例如休眠以读取将对象转换为数据库所需的其他信息(您的数据库表需要主 ID 和一些信息 - 例如对象与另一个对象的关系类型 - 不能仅通过查看您的类来自动确定定义)。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        注解只是类的元数据,没什么神奇的。您可以编写自己的注释。这些注释被赋予运行时的保留策略(这意味着您可以在运行时访问该元数据)。当您调用persist 等时,持久性提供程序会遍历您类中的字段(java.lang.reflect.Field)并检查存在哪些注释来构建您的SQL 语句。尝试编写自己的注释并用它做一些事情。在那之后它似乎不会很神奇。

        【讨论】:

          【解决方案4】:

          在您的情况下,注释工作意味着表名与实体类的映射看起来像 ....


          @Entity
          
          @Table(name = "CompanyUser")
          
          public class CompanyUserCAB implements java.io.Serializable
          
              {
              private long    companyUserID;
          
              private int     companyID;
          
                  @Id
              @GeneratedValue(strategy = GenerationType.IDENTITY)
              @Column(name = "companyUserID")
              public long getCompanyUserID()
              {
                  return this.companyUserID;
              }
              public void setCompanyUserID(long companyUserID)
              {
                  this.companyUserID = companyUserID;
              }
          
              @Column(name = "companyID")
              public int getCompanyID()
              {
                  return this.companyID;
              }
              public void setCompanyID(int companyID)
              {
                  this.companyID = companyID;
              }
          }
          

          【讨论】:

          • 请再次阅读我的问题
          猜你喜欢
          • 2015-05-12
          • 2010-11-15
          • 1970-01-01
          • 2019-12-07
          • 1970-01-01
          • 2021-10-16
          • 2017-05-07
          • 2012-06-16
          • 1970-01-01
          相关资源
          最近更新 更多