gpt4 book ai didi

java - 如何使用 JPA2 在 DDL 中为派生标识符指定生成的列名称?

转载 作者:行者123 更新时间:2023-12-01 11:11:58 25 4
gpt4 key购买 nike

数据库中的代码具有复合标识符(此处为类别+代码),另一个表中的代码参数具有相同的两个标识符+参数名称(因此类别+代码+名称)

我们使用@IdClass作为标识符。这是代码:

代码.java

@Entity
@IdClass(CodeId.class)
public class Code implements Serializable {

@Id
private String category;

@Id
private String code;

private Date validFrom;
private Date validUntil;

public String getCategory() { return category; }
public String getCode() { return code; }
public Date getValidFrom() { return validFrom; }
public Date getValidUntil() { return validUntil; }
}

CodeId.java

public class CodeId implements Serializable {

private String category;
private String code;

public CodeId() {
}

public CodeId(String category, String code) {
this.category = category;
this.code = code;
}

public String getCategory() { return category; }
public String getCode() { return code; }
}

CodeParam.java

@Entity
@IdClass(CodeParamId.class)
public class CodeParam implements Serializable {

@Id
@ManyToOne
private Code code;

@Id
private String name;

private String value;

public Code getCode() { return code; }
public String getName() { return name; }
public String getValue() { return value; }
}

CodeParamId.java

public class CodeParamId implements Serializable {

private CodeId code;
private String name;

public CodeParamId() {
}

public CodeParamId(CodeId code, String name) {
this.code = code;
this.name = name;
}

public CodeId getCode() { return code; }
public String getName() { return name; }
}
<小时/>

所以,这效果非常好。我们遇到的问题是我们的单元测试,当我们生成 HSQLDB 内存数据库并使用 hbm2ddl 使用实体创建模式时。这是生成的 DDL:

create table Code (
category varchar(255) not null,
code varchar(255) not null,
validFrom timestamp,
validUntil timestamp,
primary key (category, code)
)

create table CodeParam (
name varchar(255) not null,
code_category varchar(255),
code_code varchar(255) not null,
primary key (code_category, code_code, name)
)

alter table CodeParam
add constraint FK_mvkuf50rko4mipw1sb7r9yidk
foreign key (code_category, code_code)
references Code

如何更改 CodeParam 表中为派生标识符生成的名称(此处为 code_categorycode_code)?

我需要用“category”代替“code_category”,用“code”代替“code_code”。

我尝试使用 @AssociationOverride 覆盖 @ManyToOne 关联,但找不到任何执行此操作的内容。

我还假设使用 @EmbeddedId 等会更容易,但我需要知道是否可以通过这种方式使用 @IdClass。

最佳答案

将此添加到 CodeParam 中的私有(private)代码

@JoinColumns({ 
@JoinColumn(referencedColumnName = "category", name = "category"),
@JoinColumn(referencedColumnName = "code", name = "code") })

关于java - 如何使用 JPA2 在 DDL 中为派生标识符指定生成的列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32241866/

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