繁体   English   中英

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

[英]How can I specify the generated column name in the DDL for my derived identifier with JPA2?

我们数据库中的代码具有复合标识符(此处为category + code),而另一个表中的代码参数具有相同的两个标识符+参数名称(即category + code + name)

我们使用@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 )?

我需要使用“类别”代替“ code_category”,并使用“代码”代替“ code_code”。

我尝试使用@AssociationOverride覆盖@ManyToOne关联,但找不到能做到这一点的任何东西。

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

将此添加到CodeParam中的私人代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM