Hibernate 用JPA映射java.util.Map

Hibernate 用JPA映射java.util.Map,hibernate,jpa,mapping,many-to-many,map,Hibernate,Jpa,Mapping,Many To Many,Map,我有一个带有Hibernate映射类的JavaEE应用程序(我使用*.hbm.xml映射)。 现在我需要用JPA注释重新生成映射。一切正常,但我无法使用Map属性创建正确的映射 @Entity @Table(name = DataBaseConstants.EMPLOYEE_TABLE) public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id @Seq

我有一个带有Hibernate映射类的JavaEE应用程序(我使用*.hbm.xml映射)。 现在我需要用JPA注释重新生成映射。一切正常,但我无法使用Map属性创建正确的映射

@Entity
@Table(name = DataBaseConstants.EMPLOYEE_TABLE)
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = DataBaseConstants.EMPLOYEE_ID, sequenceName = DataBaseConstants.EMPLOYEE_SEQ)
@GeneratedValue(generator = DataBaseConstants.EMPLOYEE_ID)
@Column(name = DataBaseConstants.EMPLOYEE_ID)
private long id = 0;
@Column(name = DataBaseConstants.EMPLOYEE_NAME)
private String name = null;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = DataBaseConstants.ADDRESS_ID_FK)
private Address address = null; 

private Map<Office, Position> officePositions = null;
@实体
@表(名称=DataBaseConstants.EMPLOYEE_表)
公共类Employee实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@SequenceGenerator(名称=DataBaseConstants.EMPLOYEE_ID,sequenceName=DataBaseConstants.EMPLOYEE_SEQ)
@GeneratedValue(生成器=DataBaseConstants.EMPLOYEE_ID)
@列(名称=DataBaseConstants.EMPLOYEE\u ID)
私有长id=0;
@列(名称=DataBaseConstants.EMPLOYEE\u名称)
私有字符串名称=null;
@多通(级联=级联类型.ALL)
@JoinColumn(名称=DataBaseConstants.ADDRESS\u ID\u FK)
私有地址=空;
私有位置映射=空;
这是数据库中数据模型的一部分。 (很抱歉,我无法发布图片) 请帮我绘制办公室员工地图

在Hibernate中,我用这种方式,一切都很好

<map name="officePositions" table="EMPLOYEE_POSITION_OFFICE" lazy="false"
                fetch="join" batch-size="100">
            <key>
            <column name="EMPLOYEE_ID"></column>
        </key>
        <map-key-many-to-many class="com.example.jpajdbctask.entities.Office">
            <column name="OFFICE_ID">
            </column>
        </map-key-many-to-many>
        <many-to-many column="POSITION_ID"
            class="com.example.jpajdbctask.entities.Position" />
        </map> 

对于一个基本情况(其中key是一些原语),下面是一个JavaDoc注释示例

在您的情况下,似乎应该使用@MapKeyColumn;这里有一个与您非常相似的示例

您必须将
Employee
类中的映射更改为
Map

对于一个基本情况(其中key是一些原语),下面是一个用于注释的JavaDoc和一个示例

在您的情况下,似乎应该使用@MapKeyColumn;这里有一个与您非常相似的示例


您必须将
Employee
类中的映射更改为
Map

我本人从未使用过它,因此我无法帮助您进行准确的实现,但您需要使用注释,例如:

@CollectionOfElements(fetch=FetchType.EAGER)
@JoinTable(
    name = "MappingTable", 
    joinColumns = @JoinColumn(name = "mapOwner"))
@Column(
   name = "mapValueItem", 
   nullable = false
)  
@org.hibernate.annotations.MapKey(
    columns={
        @Column(
             name="mapKeyItem"
        )
   }
)
protected Map<String, String> getMapping() {
    return mapping_;
}
@collectionfelments(fetch=FetchType.EAGER)
@可接合(
name=“MappingTable”,
joinColumns=@JoinColumn(name=“mapOwner”))
@纵队(
name=“mapValueItem”,
nullable=false
)  
@org.hibernate.annotations.MapKey(
纵队={
@纵队(
name=“mapKeyItem”
)
}
)
受保护的映射getMapping(){
返回映射;
}

论坛可能会有所帮助。

我自己从未使用过它,因此我无法帮助您进行准确的实现,但您需要使用注释,例如:

@CollectionOfElements(fetch=FetchType.EAGER)
@JoinTable(
    name = "MappingTable", 
    joinColumns = @JoinColumn(name = "mapOwner"))
@Column(
   name = "mapValueItem", 
   nullable = false
)  
@org.hibernate.annotations.MapKey(
    columns={
        @Column(
             name="mapKeyItem"
        )
   }
)
protected Map<String, String> getMapping() {
    return mapping_;
}
@collectionfelments(fetch=FetchType.EAGER)
@可接合(
name=“MappingTable”,
joinColumns=@JoinColumn(name=“mapOwner”))
@纵队(
name=“mapValueItem”,
nullable=false
)  
@org.hibernate.annotations.MapKey(
纵队={
@纵队(
name=“mapKeyItem”
)
}
)
受保护的映射getMapping(){
返回映射;
}

论坛可能会有帮助。

thx,我尝试过,但我的db模型不适合它,Hibernate尝试访问“officePositions\u ID”列等。我在persistence.xmlthx中添加了此类的Hibernate映射,我尝试过,但我的db模型不适合它,Hibernate尝试访问“officePositions\u ID”我在persistence.xml中添加了此类的hibernate映射