gpt4 book ai didi

java - 具有多对多外键的自定义 Hibernate NamingStrategy

转载 作者:行者123 更新时间:2023-11-29 06:19:29 25 4
gpt4 key购买 nike

我正在尝试基于 ImprovedNamingStrategy 实现我自己的 Hibernate NamingStrategy。这很好……只是多对多关系的外键很丑。

示例场景:

public class Teacher {
@ManyToMany
private Set<Course> courses;
}

public class Course {
@ManyToMany
private Set<Teacher> teachers;
}

使用我的自定义命名策略

public class MyImprovedNamingStrategy extends ImprovedNamingStrategy {

private static final long serialVersionUID = 1L;

@Override
public String foreignKeyColumnName(String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName) {
String s = super.foreignKeyColumnName(propertyName, propertyEntityName, propertyTableName, referencedColumnName);
return s.endsWith("_id") ? s : s + "_id";
}
}

这将生成一个表 teachers_courses,其中包含 teachers_id、courses_id 列。

我试图实现的是一个名为 teacher_course 的表,其中包含字段 teacher_id、course_id。有什么建议,如何将我的实体的复数命名属性具体化?

最佳答案

this would lead to a table teachers_courses (...)

你确定这部分吗?据我所知,JoinTable 的默认名称由 两个关联的主要实体表(首先是拥有方)的串联名称组成,用下划线分隔(例如 Teacher_Course).

(...) with the columns teachers_id, courses_id.

对于这一部分,您必须实现一个去复数化算法,该算法将英语拼写考虑在内:

Regular plurals

  • 阶段 -> 阶段
  • 亲吻 -> 亲吻 (!)
  • 菜肴 -> 菜肴 (!)
  • 英雄 -> 英雄
  • 领土 -> 领土
  • 天 -> 天

Almost regular plurals

  • 叶子 -> 叶子
  • 刀 -> 刀

Irregular plurals

  • 绵羊 -> 绵羊
  • child -> child (!)
  • 小鼠 -> 小鼠
  • 男人->男人-女人->女人

老实说,这看起来并不容易,如果你想正确的话,可能需要某种字典。

我认为更好的选择是使用 JoinColumnJoinTable 注释覆盖默认名称。

关于java - 具有多对多外键的自定义 Hibernate NamingStrategy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3741875/

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