gpt4 book ai didi

java - 如何使用子关联属性作为 JPA 父实体中的映射键

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:49 24 4
gpt4 key购买 nike

我有两个实体 CarCarDescription其中 CarDescription取决于表 Language 中的另一个外键.

我想要完成的是拥有一个 HashMapCar这样每当我有一个Car entity-object 我能够从语言 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 .

我怎样才能完成正确的映射?

最佳答案

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<Long, CarDescription> carDescription = new HashMap<>(0);

关于java - 如何使用子关联属性作为 JPA 父实体中的映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com