gpt4 book ai didi

java - hibernate 时从 parent 到 child 的ID

转载 作者:行者123 更新时间:2023-11-30 11:31:33 25 4
gpt4 key购买 nike

这是我的代码。我想根据父类生成一个自动 ID。我正在使用一种方法来创建机场,所以它附带的我的 ID 是一个空值。将生成 AirportModel 中的 ID,但我不知道如何在子类中生成它。

@Entity(name = "Airport")
@Table(name = "ai_airport")
public class AirportModel {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "airport_id")
private List<AirportTranslatedModel> translations;

二等类( child ):

    @Entity(name = "AirportTranslated")
@IdClass(AirportTranslatedModelKey.class)
@Table(name = "ai_translated_airport")
public class AirportTranslatedModel
@Id
@Column(name="airport_id")
private Long airportId;

@Id
@Column(name="language_code", length=2)
private String languageCode;

第三个(键):

@Embeddable
public class AirportTranslatedModelKey implements Serializable {

@Column(name="airport_id")
private Long airportId;

@Column(name="language_code", length=2)
private String languageCode;

我仍然遇到同样的错误;日志:

Hibernate: insert into ai_airport (active, airport_code, city_code, country_code, externa
l_id, is_default, latitude, longitude, market_code, min_connection_time_DD, min_connection_time_DI, min_connection_time_id, min_connection_time_II, time_diff, VERSION) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Hibernate: insert into ai_translated_airport (airport_long_name, airport_short_name, airp
ort_id, language_code) values (?, ?, ?, ?)
ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Column 'airport_id' cannot be null

最佳答案

您当前的设置具有通过 Long 映射的 AirportTranslatedModel airport_id 字段 - 您将需要手动设置 airportId 以使其在数据库中设置 id。这可能需要您在建立 AirportModel->AirportTranslatedModel 关联之前保留 AirportModel 并可能刷新以分配其 PK 并使其可用,这样您就可以设置 AirportTranslatedModel.airportId。

JPA 2 虽然允许派生 ID。如果您希望 AirportTranslatedModel 的 ID 从 AirportModel 分配,它需要与它有关系。 http://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/DerivedIdentifiers 有一个简单的例子

如果您以类似的方式为您的类建模,它可能看起来像:

public class AirportModel {
..
@OneToMany(mappedby="airportModel", cascade = CascadeType.ALL, orphanRemoval = true)
private List<AirportTranslatedModel> translations;
..
}

public class AirportTranslatedModel {
@Id
@JoinColumn(name="airport_id")
private AirportModel airportModel;

@Id
@Column(name="language_code", length=2)
private String languageCode;
..
}
public class AirportTranslatedModelKey implements Serializable {
private Long airportModel;

private String languageCode;
}

请注意,如果您只是将 AirportTranslatedModelKey 用作 pk 类,则无需将其设为可嵌入。另请注意,AirportTranslatedModelKey 包含一个 Long airportModel - 这必须与 AirportModel 中 pk 的类型以及 AirportTranslatedModel 中关系属性的名称相匹配。

这将允许 AirportTranslatedModel 从 AirportModel 中提取 airport_id 值并将其用作其 PK,即使当两个实体仍然是新实体时它可能尚未生成。

关于java - hibernate 时从 parent 到 child 的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17111904/

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