我正在尝试实施classes
表,以便classname
文本字段对于每个termid
必须是唯一的。文本字段不区分大小写(utf8_general_ci
)。
MySQL的SQL脚本部分:
CREATE TABLE classes (
ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
classname VARCHAR(20) NOT NULL,
classcode VARCHAR(20),
termid INT(11) NOT NULL DEFAULT 0,
CONSTRAINT fk_classes_term
FOREIGN KEY (termid) REFERENCES terms (id)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
CONSTRAINT uc_classnames UNIQUE (termid, classname)
);
存储库层负责更新。我已经尝试过,无需异常处理。
public void updateClass(ClassEntity classEntity)
{
entityManager.persist(classEntity);
entityManager.flush();
}
我希望一旦发现冲突就抛出异常,即classname
发生变化,使其与具有相同termid
的现有实体使用的异常相同。 / p>
当我更改classname
中的字母大小写时,我一直收到这样的错误。
CreateEditClassForm.onSubmit失败,但有异常。 org.springframework.transaction.TransactionSystemException:无法 提交JPA事务;嵌套异常是 javax.persistence.RollbackException:标记为的事务 rollbackOnly
我希望得到类似javax.persistence.EntityExistsException
的内容。
SQL脚本是否有问题,或者是否可以使用数据库配置?
用户界面使用Java Wicket编码,更新时不必检查数据库。
编辑:使用一种(23种)方法添加ClassService。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
// project imports omitted
@Service
@Transactional
public class ClassService
{
@Autowired
private ClassRepository classRepository;
@Autowired
private ClassUsersRepository classUsersRepository;
@Autowired
private TermRepository termRepository;
@Autowired
private TermService termService;
public void updateClass(ClassEntity classEntity)
{
classRepository.updateClass(classEntity);
}
}