我是JPA的新手,并希望在处理JPA的持久性异常时找到最佳实践,例如,可以由用户解决的唯一约束违规.有很多关于如何编写JPA应用程序的例子,但几乎没有关于如何处理由它们引发的异常的例子.:/
例如,注册用户,该人输入已被系统主动使用的电子邮件地址并获得约束违规:
try {
em.persist(credentials);
} catch (javax.persistence.PersistenceException ex) {
Run Code Online (Sandbox Code Playgroud)
添加重复的电子邮件时会产生此错误:
WARNING: SQL Error: 0, SQLState: 23505
SEVERE: ERROR: duplicate key value violates unique constraint "EMAIL_UQ_IDX"
Detail: Key (email)=(testuser@xyz.com) already exists.
Run Code Online (Sandbox Code Playgroud)
如何才能将有意义的答案反馈给用户?例如:Oops看起来好像有人正在使用该电子邮件地址,您确定以前没有注册吗?是否有内置工具来解析这个或者我是否需要在(可能是一系列)if语句中对异常消息运行正则表达式?
如果它被捕获在业务层上呢...那么将它踢到表示层的最佳实践是什么...就像我之前说过的那样,这样就可以为用户提供"好"的消息.
增加了对净度:正是这样的人都知道,我有,有,而且我仍然在寻找各种不同类型的持久性的异常,这里是一些我一直在做我没有用"try语句"包括研究上面包含的示例:
try {
em.persist(credentials);
} catch (javax.persistence.PersistenceException ex) {
System.out.println("EXCEPTION CLASS NAME: " + ex.getClass().getName().toString());
System.out.println("THROWABLE CLASS NAME: " + ex.getCause().getClass().getName().toString());
Throwable th = ex.getCause();
System.out.println("THROWABLE INFO: " + th.getCause().toString());
Logger.getLogger(CredentialsControllerImpl.class
.getName()).log(Level.INFO, "Credentials Controller "
+ "persistence exception "
+ "EXCEPTION STRING: {0}", ex.toString());
Logger.getLogger(CredentialsControllerImpl.class …Run Code Online (Sandbox Code Playgroud) 我有一个表,我想添加一个位列,我希望所有现有数据默认为false.
如何更改我的表,以便在我为现有行插入false之前允许我指定NOT NULL?
我应该将其创建为可空的,执行插入操作而不是将其置为不可空的吗?
数据定义语句:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id)
)
Run Code Online (Sandbox Code Playgroud)
的价值和目的是什么
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id)?
与此相反
PRIMARY KEY (P_Id)?
MySQL的文档真的不说太多关于这个,除了这个。
我的桌子或多或少看起来像
Name | Lastname | ID | Date
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止数据库运行插入功能,如果一个人这样Name,Lastname并且ID已经存在而没有运行其他查询来搜索他?
据说我有一个名为 Person 的表,定义如下:
CREATE TABLE Persons
(
P_Id uniqueidentifier Default newsequentialid() NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
Run Code Online (Sandbox Code Playgroud)
如何使用 sql 查询删除该列的默认值?此外,如果一开始不存在,我该如何添加它。我知道可以通过更改表并在 P_Id 列上添加约束来添加它,但我不确定这是否是唯一的方法。我遇到了这篇文章,但是那里建议的内容似乎并没有真正起作用。
有任何想法吗?
sql ×4
mysql ×2
constraints ×1
database ×1
exception ×1
java ×1
jpa ×1
parsing ×1
php ×1
primary-key ×1
schema ×1
sql-server ×1