Hibernate@EmbeddedId+;参加

Hibernate@EmbeddedId+;参加,hibernate,mapping,one-to-many,Hibernate,Mapping,One To Many,我有一个hibernate映射问题。我有以下两个DB表(不允许我更改DB): 我试图为这些DB表创建实体,但不知道如何映射表之间的连接。以下是我的尝试(但它是错误的): 可嵌入类 @Embeddable public class LocationGroupId implements Serializable { private static final long serialVersionUID = -6437671620548733621L;

我有一个hibernate映射问题。我有以下两个DB表(不允许我更改DB):

我试图为这些DB表创建实体,但不知道如何映射表之间的连接。以下是我的尝试(但它是错误的):

可嵌入类

    @Embeddable
    public class LocationGroupId implements Serializable {

        private static final long serialVersionUID = -6437671620548733621L;
        private Location loc;  
        private String group;   
        
        @Column(name = "LOC_ID")
        public Location getLoc() {
            return loc;
        }
        
        @Column(name = "GROUP_NAME")
        public String getGroup() {
            return group;
        }
        
        // ...
    }   
使用的嵌入式ID

    @Entity
    @Table(name = "LOCATION_GROUPS")
    public class LocationGroup {

        private LocationGroupId id;

        @EmbeddedId
        public LocationGroupId getId() {
            return id;
        }
        
        // ...
    }
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {

    private LocationGroupId id;
    private Location location;

    @EmbeddedId
    public LocationGroupId getId() {
        return id;
    }

    @ManyToOne
    @JoinColumn(name = "LOC_ID")
    @MapsId("locationId")
    private Location getLocation() {
        return location;
    }
    // ...
}
@实体
@表(name=“位置”)
公共类位置{
私人长id;
私有字符串名称;
私人名单组;
@列(name=“name”)
公共字符串getName(){
返回此.name;
}
@OneToMany(mappedBy=“id.loc”)
公共列表getGroups(){
返回此项。分组;
}
@身份证
@列(name=“ID”)
@SequenceGenerator(name=“LocationIdGen”,sequenceName=“LOCATION\u SQ”)
@GeneratedValue(策略=GenerationType.AUTO,generator=“LocationIdGen”)
公共长getId(){
返回此.id;
}
// ...
}
困难在于我想在一个列和embeddedId列的一部分之间建立一个单一的连接。
对这个问题有什么想法吗?(我使用的是hibernate 4.0.1)

必须使用
@JoinColumn
映射位置,而不能使用
@Column

@JoinColumn(name = "LOC_ID")
public Location getLoc() {
    return loc;
}
注意,这不是标准的JPA。要使其标准化,您可以使用

可嵌入类

@Embeddable
public class LocationGroupId implements Serializable {

    private static final long serialVersionUID = -6437671620548733621 L;
    private Long locationId;
    private String group;

    @Column(name = "LOC_ID")
    public Long getLocationId() {
        return loc;
    }

    @Column(name = "GROUP_NAME")
    public String getGroup() {
        return group;
    }
    // ...
}
使用的嵌入式ID

    @Entity
    @Table(name = "LOCATION_GROUPS")
    public class LocationGroup {

        private LocationGroupId id;

        @EmbeddedId
        public LocationGroupId getId() {
            return id;
        }
        
        // ...
    }
@Entity
@Table(name = "LOCATION_GROUPS")
public class LocationGroup {

    private LocationGroupId id;
    private Location location;

    @EmbeddedId
    public LocationGroupId getId() {
        return id;
    }

    @ManyToOne
    @JoinColumn(name = "LOC_ID")
    @MapsId("locationId")
    private Location getLocation() {
        return location;
    }
    // ...
}

这两个映射在中进行了解释。

JB Nizet,谢谢您的回答。在我读你的答案之前,我找到了那一页:并使用了它。但我感谢你的回答,并接受它作为解决方案:)