当前位置: 首页 > 面试题库 >

如何通过JPA注释引入多列约束?

杨俊茂
2023-03-14
问题内容

我试图在JPA映射的实体上引入多键约束:

public class InventoryItem {
    @Id
    private Long id;

    @Version 
    private Long version;

    @ManyToOne
    @JoinColumn("productId")
    private Product product;

    @Column(nullable=false);
    private long serial;
}

基本上,(产品,序列)对应该是唯一的,但是我只找到一种说序列应该是唯一的方法。这显然不是一个好主意,因为不同的产品可能具有相同的序列号。

有没有办法通过JPA生成此约束,还是我被迫手动将其创建到DB?


问题答案:

您可以使用@Table(uniqueConstraints = ...)实体类中的注释来声明唯一约束,即

@Entity
@Table(uniqueConstraints={
    @UniqueConstraint(columnNames = {"productId", "serial"})
}) 
public class InventoryItem {
    ...
}

请注意,这并不是在数据库中神奇地创建唯一约束,您仍然需要DDL才能创建它。但是似乎您正在使用某种自动化工具来基于JPA实体定义创建数据库。



 类似资料:
  • 问题内容: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 问题答案: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 否。如果要定义表和列注释,最好的选择是在生成的DDL中根据事实进行操作,然后再对数据库执行操作。

  • 我是Spring Security的新手。我看过很多关于如何通过外部属性文件的注释注入值的文章。我尝试了很多方法,但最终都是用java。lang.IllegalArgumentException:无法解析占位符“val.id”异常。 你能给我一些提示如何处理这个例外吗? 我的java类如下所示: 我的属性文件名为val.properties,位于WEB-INF下,其内容为val.id=xyz 我将

  • 问题内容: 我试图通过注释将整个JSF托管Bean注入另一个托管Bean非常相似,但是我正在注入Bean,而不是Servlet)。这就是我在做什么: 不起作用(JSF 2.0 / Mojarra 2.0.3): 有没有可能或者我需要通过编程方式进行注射? 问题答案: 您需要添加setter和getter 当将解析并注入依赖项时,它将使用setters注入,因此适当的setters / getter

  • 问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。

  • 我有一个由3个表组成数据库,每个表指示一个用户,如下所示: > Staff表“user 2”。 null 我想在它们之间实现一个名为'post'的公用表,其中每个用户都可以将内容发布到post表的content列,但是我需要标识海报的类型'the one who post the post‘,因此我将向post表添加一列user_type.user_type列应该保存用户的ID'Admin,Sta

  • 我在整个代码中有一堆常量,用于系统的各种可调整属性。我正在将它们全部移动到一个中央文件中。我目前的解决方案是有一个静态加载文件并公开各种getter方法,如下所示: 唯一的问题是,对于我从这个文件中获得的每个常量,我都有一些样板: 我不认为我想使用Spring或类似的东西,因为那看起来更像是boilerplae。我希望使用自定义注释来解决这个问题。我找到了这个教程,但是我真的不能弄清楚如何从注释处