【问题标题】:Map composite primary key to foreign key entities with Java Hibernate使用 Java Hibernate 将复合主键映射到外键实体
【发布时间】:2014-08-02 12:47:00
【问题描述】:

我正在尝试从具有两个主键的表中检索实体列表,这两个主键分别是一个外键的 id。

MySQL 表:

绘画桌:

id - int, PK, Auto increment
name - varchar(45)

图片表:

id - int, PK, Auto increment
name - varchar(45)
location - varchar(45)

painting_to_picture_link 表:

painting_id - int, FK to id in painting
picture_id -  int, FK to id in painting
I've set primary key (painting_id, picture_id)
and set them to their foreign keys also as written above.

在 Java 中:

Painting.java

@Entity
@Table(name = "paintings")
public class Painting {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;           

    ...
}

Picture.java

@Entity
@Table(name = "pictures")
public class Pictures {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;           

    @Column(name = "location")
    private String location;   
    ...
}

PaintingPictureLink.class

   public class PaintingPictureLink implements Serializable {

    @<SOME ANNOTATION HERE>
    private Painting painting;

    @<SOME ANNOTATION HERE>
    private Picture picture;
    ...
   }

我看过很多例子,但对我没有用。 我试过把@Id 注释、@EmbeddedId 等... 无效。 我得到的错误是该表未映射,无法确定模型的类型,缺少@Id 注释...:|

不胜感激查询此表并获取 PaintingPictureLink 列表的帮助。

我遵循的一些示例:

https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Web_Server/1.0/html/Hibernate_Annotations_Reference_Guide/ch03s02s06.html

Using an Entity (and their Primary Key) as another Entity's Id

谢谢,

男人

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    捋一捋

    找到了解决办法。

    我创建了一个主键类:

    @Embeddable
    public class PicturePaintingPK implements Serializable {
        @ManyToOne
        private Painting painting;
    
        @ManyToOne
        private Picture picture;
    
        public PicturePaintingPK() {}
    
        // getters and setters //        
    }
    

    在 PicturePaintingLink 类中:

       @Entity
       @Table(name = "painting_to_picture_link")
       public class PaintingPictureLink implements Serializable {
    
            @Id
            private PicturePaintingPK primaryKey = new PicturePaintingPK()
    
            ...
            //constructor//
            ...
    
            public TTPK getPrimaryKey() {
                return primaryKey;
            }
    
            public void setPrimaryKey(TTPK primaryKey) {
                this.primaryKey = primaryKey;
            }
    
            // ... all the other getters and setters needed .... //
       }
    

    此解决方案的来源来自:

    Example from Hibernate forum

    男人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-28
      • 2017-08-06
      • 1970-01-01
      • 2012-04-06
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多