如何在JPA父实体中将子关联属性用作Map键
我有两个实体Car
和CarDescription
,其中CarDescription
依赖于表Language
另一个外键。
我想要实现的是在Car
有一个HashMap
,这样每当我有一个Car
实体对象时,我就可以从语言id访问所有描述。
实体Car.java
@Entity @Table(name = "Car") public class Car extends AbstractTimestampEntity implements Serializable { private static final long serialVersionUID = -5041816842632017838L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "ID", unique = true, nullable = false) private Long id; @OneToMany(mappedBy="car") @MapKeyColumn(name = "language_ID") // @MapKey(name = "language") // does not work either private Map carDescription = new HashMap(0); }
实体CarDescription.java
@Entity @Table( name="car_description", uniqueConstraints = { @UniqueConstraint(columnNames={"language_id", "name"}) } ) public class CarDescription extends AbstractTimestampEntity implements Serializable { private static final long serialVersionUID = 2840651722666001938L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "ID", unique = true, nullable = false) private Long id; @NotNull @ManyToOne private Car car; @NotNull @OneToOne private Language language; // .. }
实体Language.java
@Entity public class Language implements Serializable { private static final long serialVersionUID = 3968717758435500381L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="ID") private Long id; // .. }
我遇到的问题是映射为我提供了从CarDescription.id
到CarDescription
。
我怎样才能完成正确的映射?
在CarDescription
您需要添加languageId
属性:
@Column(name = "language_id", insertable = false, updatable = false) private Long languageId; @NotNull @OneToOne @JoinColumn(name = "language_id") private Language language; public void setLanguage(Language language) { this.languageId = language.getId(); this.language = language; }
然后你可以在Car
实体中使用它,如下所示:
@OneToMany(mappedBy="car") @MapKey(name = "languageId") private Map carDescription = new HashMap<>(0);
- org.hibernate.AnnotationException:referencedColumnNames引用未映射到单个属性
- 获取org.hibernate.exception.JDBCConnectionException:即使通过JNDI也无法执行查询
- 我应该如何使用Spring / Hibernate项目设置业务对象
- Hibernate奇怪地收获clob值
- 将tinyint映射为布尔hibernate
- 在温和使用后,Tomcat会随着AbstractProtocol暂停而随机关闭
- hibernate与c3p0:createClob()尚未实现
- 在Hibernate JPA2上使用唯一约束
- JPA / Hibernate批量(批量)插入