代码之家  ›  专栏  ›  技术社区  ›  ripper234 Jonathan

在Hibernate中构图是如何工作的?

  •  2
  • ripper234 Jonathan  · 技术社区  · 15 年前

    我试图在hibernate中使用带注释的合成。

    我有:

    @Entity
    @Table(name = "Foo")
    public class Foo {
        private Bar bar;
    
        public void setBar(Bar bar){...}
        public Bar getBar() {...)
    }
    
    public class Bar {
      private double x;
    
      public void setX(double x) {...}
      public double getX() {...}
    }
    

    当我试图拯救Foo的时候

    无法确定实体的类型 列的表Foo上的org.bla.Bar: [org.hibernate.mapping.Column(bar)]

    我试着在条上添加一个@Entity注释,但这让我:

    没有为实体指定标识符 组织栏

    3 回复  |  直到 15 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    该机制在参考文件的本节中有描述:

    5.1.5. Embedded objects (aka components)

    显然hibernate为此使用JPA注释,所以 referred to by Ralph 是正确的

    简而言之:

    如果你给一个班级打分 Address 作为 @Embeddable 并添加类型为的属性 地址 上课 User ,将属性标记为 @Embedded ,则生成的数据库表 用户 将具有由指定的所有字段 地址 .

    代码见拉尔夫的答案。

        2
  •  4
  •   Ralph    15 年前

    你需要详细说明Foo和Bar之间的关系(比如@ManyToOne或@OneToOne)。

    或者如果Bar不是自己的实体,那么用@Embeddable标记它,并将@Embedded添加到Foo中的变量声明中。

    @Entity
    @Table(name = "Foo")
    public class Foo {
        @Embedded
        private Bar bar;
    
        public void setBar(Bar bar){...}
        public Bar getBar() {...)
    }
    
    @Embeddable
    public class Bar {
      private double x;
    
      public void setX(double x) {...}
      public double getX() {...}
    }
    

    @见: http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-component-using-annotations-1.html --这个例子展示了@Embeddable add@Embedded composi方式,其中Foo和Bar(在这个例子中:Student和Address)映射在同一个表中。

        3
  •  0
  •   kraftan    15 年前

    每个 简单的 实体必须标记为实体(带有 @Entity )并且有一个标识符(大部分是长的)作为主键。必须使用相应的关联注释声明每个非基元关联/组合( @OneToOne , @OneToMany , @ManyToMany ). 我建议你通读 Hibernate Getting Started Guide . 请尝试以下操作以使代码示例正常工作

    @Entity
    public class Foo {
        @Id
        @GeneratedValue
        private Long id;
    
        @OneToOne
        private Bar bar;
    
        // getters and setters for id and bar
    }
    
    @Entity
    public class Bar {
        @Id
        @GeneratedValue
        private Long id;
    
        private double x;
    
        // getters and setters for id and x
    }