【问题标题】:catching ConstraintViolationException from jpa gives constraint name null value从 jpa 捕获 ConstraintViolationException 会给出约束名称空值
【发布时间】:2015-06-23 11:31:39
【问题描述】:

我使用 jpa 和 hibernate 来持久化我的数据。我的模型是

@Entity
@Table(name = "user", uniqueConstraints=@UniqueConstraint(columnNames={"username"}, name="username"))
public class User implements Serializable {
    @Transient
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "username", nullable = false)
    private String username;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "user_role", nullable = false)
    private UserRole userRole;
}   

我正在捕获 ConstraintViolationException 以捕获用户是否违反了唯一值。但是当我尝试使用 ConstraintViolationException.getConstraintName() 访问 constraintName 时,我得到了 null 值。我如何知道哪一列违反了约束从而警告用户?

【问题讨论】:

    标签: java mysql hibernate jpa


    【解决方案1】:

    试试:cve.getCause().getMessage()

    【讨论】:

    • 它为键“用户名”提供了重复条目“管理员”。所以我需要提取值和键。这来自MySQLIntegrityConstraintViolationException。我可以确定情况总是如此吗?没有更通用的方法吗?如果违反了多个约束怎么办?必须有更通用(自动化)的方式。
    • 我发现了类似的问题:stackoverflow.com/questions/2118227/…
    猜你喜欢
    • 2011-07-09
    • 2023-03-30
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多