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

JPA如何在@OneToMany关系的列上添加唯一约束如用户名

景育
2023-03-14
问题内容

我有一个Site代表网站的Class和一个Class User。A Site可以有多个User

class Site {

    private int site_ID;

    @OneToMany // with a join table
    private List<User> users;
    // ...
}

class User {

    private int user_ID;

    private String name;

    private String lastname;

    private String username;

    private String password;

}

我想允许所有站点上都存在相同的用户名,但每个站点上都只有一个。

Site/User/username
1   /1   /username1
1   /2   /username2
2   /3   /username1

我怎样才能做到这一点?


问题答案:

让用户拥有一个站点参考:

@ManyToOne(optional=false)
private Site site;

现在将约束添加到用户:

@Table(uniqueConstraints = {
    @UniqueConstraint(columnNames = { "username", "site" }))
} @Entity
public class User{
// etc
}

您还必须更改站点映射:

@OneToMany(mappedBy="site")
private List<User> users;


 类似资料:
  • 这是我的JPA实体类: 这个类有一个相当复杂的唯一约束:的组合被认为是唯一的。 所以我在类中添加了以下约束注释: 当我尝试练习我的课时,我得到以下例外情况: 异常要点是: 如果我没有在幕后为单个实体类指定该约束,Hibernate将生成两个表:一个表用于所有“简单”实体数据,另一个表用于实体数据: ... 这个问题以前读: JPA:跨集的唯一约束(...另一个表上的唯一约束) 进一步思考我的问题,

  • 问题内容: 当违反唯一约束时,将引发a。但是可能有多种原因抛出异常。我如何才能发现违反了唯一约束? 问题答案: 我如何才能发现违反了唯一约束? 异常是链接在一起的,您必须递归调用以获取提供程序特定的异常(并可能转到),以将其转换为应用程序可以很好地为用户处理的内容。下面将打印异常链: 对于异常处理和“翻译”,您可以执行类似于Spring的操作(请参阅各种类,例如,以获取想法)。 所有这些都不是很好

  • 我有一张桌子,不知怎的,同一个人进了我的桌子两次。现在,主键只是一个自动编号,但还有两个字段存在,我想强制它们是唯一的。 例如,这些字段是: 我只想要一张带有唯一PersonNumber和Active=1的唱片 (因此这两个字段的组合必须是唯一的) SQL server中现有表的最佳方式是什么?我可以这样做,如果其他任何人使用与现有值相同的值进行插入,则插入失败,因此我不必在应用程序代码中担心这一

  • 问题内容: 我想在MySQL表中添加一列,命名为。在此列中,只有一个记录可以设置为。 如何使用mysql将这个约束添加到我的列中? 谢谢! 更新 如果不是一个限制,我应该添加。我们如何处理数据库上的此类问题? 问题答案: 我认为这不是对单个默认值的情况进行建模的最佳方法。 取而代之的是,我将IsDefault列留在外面,并创建一个单独的表,该表只有一行,并且只有构成主表主键的列。在此表中,放置标识

  • 问题内容: 以下模型是一个事件的简单邀请,从一个用户发送到另一个用户。我想确保邀请在以下三列中是唯一的:to_user,from_user和event。 我尝试使用本专栏,但它不起作用。该约束应在SQLite以及生产中的MySQL上均有效。如何定义此唯一约束? 问题答案: 您需要将约束添加到表,而不是模型。为此,请使用声明式: 如果已经在数据库中创建了表,则需要删除该表并再次运行,或者使用Alem

  • 我使用一个Postgreql数据库与JPA/Hibernate.当我向列添加约束时,即“nullable=false”,数据库列不会改变以反映这一点。删除表并重新运行应用程序即可完成此工作。 这是否可以通过JPA/Hibernate机制实现,而无需删除条目或表?比如“尝试更改表,并拒绝在不一致的数据上这样做”?在我的application.properties,我已经设置 任何其他设置似乎都在删除