首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate注释-约束的名称

问Hibernate注释-约束的名称
EN

Stack Overflow用户
提问于 2015-04-22 04:19:29
回答 1查看 752关注 0票数 2

我开始在项目中使用注释作为一个借口来掌握它们的诀窍,我有一个问题。

我为数据库中的每个表创建了域类,并使用注释将成员与列连接起来,使用验证之类的东西。我还通过使用uniqueConstraints来使用唯一索引约束,并且在具有多对一或多对多关系的情况下,我使用jointable和join列。

我有两个问题,可能有点天真,

1)我将hibernate.hbm2ddl.auto设置为在persistence xml中创建,然后运行应用程序,以便通过应用程序创建数据库。然后,我转到数据库并导出模式创建sql文件。这是获取创建模式sql的有效实践吗?此外,我还注意到,虽然我在外键和索引的注释中使用的约束名称是传输的,但在我的多对多关系中,名称是生成的名称,而不是我指定的名称。除了我可能做错了什么以外,还有其他原因吗?

2)如果我从上面获得模式,将约束的名称固定为我想要的,然后运行它来创建数据库,并运行应用程序,但是将persistense xml选项hibernate.hbm2ddl.auto设置为update是否会导致问题,因为约束的名称可能与注释中的名称不匹配?

对于多对多关系,这是两个域类

代码语言:javascript
复制
@Entity
@Table(name = "SOLUTION")
public class Solution {

    @Id
    @Column(name = "SOLUTION_CODE", length = 20, nullable = false)
    @Size(min = 1, max = 20, message = "The solution code size is not within limits (0-20)")
    @NotNull(message = "The solution code cannot be null")
    private String code;

    @Column(name = "SOLUTION_DESCRIPTION", length = 200, nullable = false)
    @Size(min = 1, max = 200, message = "The solution description is not within limits (0-200)")
    @NotNull(message = "The solution description cannot be null")
    private String description;

    @ManyToMany(mappedBy = "solutionList")
    private List<Category> categories;

    public Solution() {
    }
}


@Entity
@Table(name = "CATEGORY")
public class Category {

    @Id
    @Column(name = "CATEGORY_CODE", length = 20, nullable = false)
    @Size(min = 1, max = 20, message = "The category code size is not within limits (0-20)")
    @NotNull(message = "The category code cannot be null")
    private String code;

    @Column(name = "CATEGORY_DESCRIPTION", length = 200, nullable = false)
    @Size(min = 1, max = 200, message = "The category description is not within limits (0-200)")
    @NotNull(message = "The category description cannot be null")
    private String description;

    @ManyToMany
    @JoinTable(
            name = "SOLUTION_CATEGORY_MAPPING",
            joinColumns = @JoinColumn(
                    name = "CATEGORY_CODE",
                    referencedColumnName = "CATEGORY_CODE",
                    foreignKey = @ForeignKey(name = "FK_SOLUTION_CATEGORY_CATEGORY_CODE")),
            inverseJoinColumns = @JoinColumn(
                    name = "SOLUTION_CODE",
                    referencedColumnName = "SOLUTION_CODE",
                    foreignKey = @ForeignKey(name = "FK_SOLUTION_CATEGORY_SOLUTION_CODE")))
    private List<Solution> solutionList;

    public Category() {
    }
}

我希望foreign key约束具有我指定的名称,但它们只是生成了名称

编辑:另外,我想知道是否有人会过度使用注释,以及它们是否会影响性能?

EN

回答 1

Stack Overflow用户

发布于 2015-04-22 05:16:51

可以使用@JoinTable设置多对多表

关于约束名称。当然,hibernate并不支持每个数据库的所有功能。因此,模式生成只是为了帮助您。在将其投入生产之前,您必须阅读它、修复它并对其进行测试。此外,将hibernate放在auto.ddl=update的生产环境中也是一个非常糟糕的主意。不要这样做。相反,始终使用sql文件来构建schama。

使用约束名称的问题并不大。你可以创建你自己的,hibernate即使在validate模式下也不应该抱怨。

还可以考虑使用db迁移工具,如flyway。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29782323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档