gpt4 book ai didi

java - Hibernate使用命名策略生成pk ID

转载 作者:行者123 更新时间:2023-12-02 07:45:37 26 4
gpt4 key购买 nike

我正在使用 Hibernate JPA。我想扩展一个包含我的 pk 生成器和一些哈希等于代码的基类,但是我的公司正在使用 table_name_id 来描述物理数据库中的 ID,这似乎是不可能的。我刚刚被告知我可以使用 hibernates 命名策略动态地将表名添加到我的变量前面,但是我还没有找到一个很好的例子来说明如何实现这一点。有人能够向我指出一些关于如何实现这一目标的示例代码或文档吗?

父类(super class)

@MappedSuperclass
public abstract class Base implements Serializable {

@Id
@GeneratedValue(strategy = AUTO)
@Column(name="ID", nullable = false)
private Integer id;

....
}

子类A

@Entity
@Table(name="TABLE_A")
public class TableA extends Base {
// physical model needs base pk id to be prefixed with table_a resulting in table_a_id.
...
}

子类B

@Entity
@Table(name="TABLE_B")
public class TableB extends Base {
// physical model needs base pk id to be prefixed with table_b resulting in table_b_id.
...
}

最佳答案

我只是做了完全相同的事情,确保为所有 PK 生成的列名称都具有 tablename_id 格式。

默认情况下,在 JPA 模式下使用 hibernate 时,它​​使用 EJB3NamingStrategy 作为默认命名策略。通过创建以下自定义 NamingStrategy 来扩展 EJB3NamingStrategy > ,您只能更改主键的命名策略,JPA标准规定的其他命名策略保持不变。

public class CustomNamingStrategy extends EJB3NamingStrategy {

private static final long serialVersionUID = -1953826881322136108L;
private String currentTableName;

public String propertyToColumnName(String propertyName) {

if (propertyName.equalsIgnoreCase("id")) {
return currentTableName + "_id";
} else {
return StringHelper.unqualify(propertyName);
}
}

public String tableName(String tableName) {
currentTableName = tableName;
return tableName;
}
}

请注意,您必须从所有 @Entity 中删除 @Column(name="ID"),以便 Hibernate 能够使用自定义 NamingStrategy 生成列名称。

关于java - Hibernate使用命名策略生成pk ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904320/

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