Hibernate 用JPA映射java.util.Map
我有一个带有Hibernate映射类的JavaEE应用程序(我使用*.hbm.xml映射)。 现在我需要用JPA注释重新生成映射。一切正常,但我无法使用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
@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映射