【发布时间】:2015-09-22 23:41:04
【问题描述】:
我有两个实体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<Long, CarDescription> 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 的映射。
我怎样才能完成正确的映射?
【问题讨论】:
-
为什么
@MapKey(name = "language")不适合你? -
@DraganBozanovic 是一样的。我总是得到一张地图
CarDescription.id -> CarDescription,但我想要的是Language.id -> CarDescription。我不知道,但@MapKey(name = "language")不起作用.. :/ -
好像被忽略了。进口好不好,是
javax.persistence的注解吗? -
@DraganBozanovic 是的,它来自
javax.persistence。我尝试过的另一件事是@MapKeyColumn (name = "language_ID"),但这也不起作用,但在这种情况下,地图只是空的..不知道这里有什么不工作 -
您尝试过将
@MapKeyColumn与@MapKey一起使用还是不使用?
标签: java hibernate jpa orm hibernate-mapping