标签: unique-constraint

处理NHibernate异常

在NHibernate中处理异常的最佳实践是什么?

我有一个带有以下内容的SubjectRepository:

    public void Add(Subject subject)
    {
        using (ISession session = HibernateUtil.CurrentSession)
        using (ITransaction transaction = session.BeginTransaction())
        {

            session.Save(subject);
            transaction.Commit();
        }
    }
Run Code Online (Sandbox Code Playgroud)

单元测试如下:

        [Test]
    public void TestSaveDuplicate()
    {
        var subject = new Subject
        {
            Code = "En",
            Name = "English"
        };

        _subjectRepository.Add(subject);

        var duplicateSubject = new Subject
        {
            Code = "En",
            Name = "English1"
        };

        _subjectRepository.Add(duplicateSubject);
    }
Run Code Online (Sandbox Code Playgroud)

我已经到了处理单元测试产生的错误并且有点卡住的问题.这会按预期失败,但是使用GenericADOException时,我期待一个ConstraintViolationException或类似的东西(在数据库级别的主题代码上存在唯一性约束).

ADOException包含一个MySQL Exception,它有一个明智的错误消息,但我不想通过抛出内部异常来开始破解封装.特别是因为MySQL没有最终确定为该项目的后端.

理想情况下,我希望能够捕获异常并在此时向用户返回合理的错误.是否有任何记录的最佳实践方法来处理NHibernate Exceptions并向用户报告出错的原因以及原因?

谢谢,

马特

nhibernate exception-handling exception unique-constraint

6
推荐指数
1
解决办法
1万
查看次数

Hibernate Natural ID重复问题

我是Hibernate和DBs的新手,所以请原谅这个基本问题.

我正在使用DIS协议,特别是DIS的Open-DIS实现.在DIS中,每个EntityStatePdu(包含模拟中实体的状态)都有一个EntityId对象,一个3个整数的元组.我想将此对象用作自然ID,并保持标准的代理ID.我的问题是我无法弄清楚如何确保DB确定给定的EntityId已经存在并使用该EntityId的主键作为EntityStatePdu中的外键.

换句话说,假设我有两个EntityStatePdus,EntityID(1,2,3); 即我们有来自同一实体的两个更新.我想要的东西如下:

表:

entity_id 
pk   site   app    entity
0    1      2      3


entity_state_pdu
pk  entity_id_fk  timestamp
0   0             1
1   0             2
Run Code Online (Sandbox Code Playgroud)

以下是我正在测试的简化类:

@Entity
public class TestEntity {

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

    @NaturalId
    @ManyToOne(cascade = CascadeType.ALL)
    private TestId naturalId;

    public Long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public TestId getNaturalId() {
        return naturalId;
    }

    public void setNaturalId(TestId naturalId) {
        this.naturalId = naturalId;
    }
}
Run Code Online (Sandbox Code Playgroud)

@Entity
public …
Run Code Online (Sandbox Code Playgroud)

java sql hibernate relational-database unique-constraint

6
推荐指数
1
解决办法
3103
查看次数

Oracle唯一约束违规引用似乎不存在的约束

我收到一个我无法理解的错误.错误非常简单:

ORA-00001: unique constraint (*schema*.*xyz_constraint*) violated
Run Code Online (Sandbox Code Playgroud)

然而,造成我困惑的是事实上似乎不存在这样的约束.它当然没有在桌子上定义; 有问题的DB几乎没有定义参照完整性,我插入数据的特定表没有定义键.

对于它的价值,我无法在数据库中的任何位置找到约束:

    select *
    from all_constraints 
    where constraint_name like '%xyz_constraint%'
Run Code Online (Sandbox Code Playgroud)

有什么我可以忽略的吗?谢谢.

oracle oracle10g unique-constraint

6
推荐指数
2
解决办法
3805
查看次数

添加特殊约束以避免具有此条件的重复行?

我有一个看起来像这样的表:

ClientId  FloorNum   BedNum   IsActive
11        2          212      1        
12        2          214      0        
12        2          214      1        
13        2          215      0        
13        2          215      0        
13        2          215      0        
13        2          215      0        
13        2          215      1        
12        2          215      1        
Run Code Online (Sandbox Code Playgroud)

如您所见,FloorNum/BedNum组合2/215有两行,其中IsActive等于1.这不可能发生.

另一方面,一个FloorNum/BedNum组合可以有许多行,其中IsActive等于0.

如何向表中添加约束,以便FloorNum/BedNum组合只能有一行IsActive = 1?

任何帮助表示赞赏.

sql t-sql sql-server unique-constraint sql-server-2008

6
推荐指数
1
解决办法
1728
查看次数

MySQL中的唯一约束

默认情况下唯一约束是索引吗?如果不是,那么在SELECT ... WHERE子句中使用唯一约束时是否具有与索引列相同的性能结果?

谢谢

mysql performance database-design unique-constraint database-indexes

5
推荐指数
1
解决办法
1227
查看次数

JPA2 唯一约束:我真的需要刷新吗?

我有一个 DAO,我需要在其中捕获唯一的约束异常。为此,唯一可行的解​​决方案是在持久化之后刷新我的 EntityManager。只有这样我才能进入一个catch块,我必须过滤掉异常。而且,我的 DAO 方法需要包含在一个事务中(REQUIRES_NEW),否则我会遇到 RollBackException。

难道我做错了什么?

try {
        em.persist(myObject);
        em.flush();
    } catch (PersistenceException ex) {
        if (ex.getCause() != null) {
            String cause = ex.getCause().toString();
            if (cause != null) {
                if (cause.contains("org.hibernate.exception.ConstraintViolationException")) {
                    logger
                            .error("org.hibernate.exception.ConstraintViolationException: possible unique constraint failure on name");
                    throw ex;
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

java orm jpa unique-constraint jpa-2.0

5
推荐指数
1
解决办法
3630
查看次数

Hibernate - 如何捕获“完整性约束违规:唯一约束或索引违规”

在我的表中,我有一个独特的约束。在休眠中,当我添加一个违反该约束的项目时,我想捕获它,因此它将更新而不是创建一个项目。

当我没有设置 try-catch 块时

    updated = query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

它得到以下错误

    Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: WEEKROOSTERITEMUNI
Run Code Online (Sandbox Code Playgroud)

当我设置以下 try-catch 块时

    try {
        updated = query.executeUpdate();

     }    
   catch(PersistenceException e){                                                         
        LOG.debug("this is PersistenceException exception throw");      
    } 
Run Code Online (Sandbox Code Playgroud)

它收到以下错误

    Caused by: javax.persistence.RollbackException: Transaction marked as rollbackOnly
Run Code Online (Sandbox Code Playgroud)

当我捕获“ConstraintViolationException”时,我只是不断收到约束异常,它没有捕获任何东西。

    Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: WEEKROOSTERITEMUNI
Run Code Online (Sandbox Code Playgroud)

我怎么能抓住这个?

hibernate exception rollback unique-constraint hibernateexception

5
推荐指数
1
解决办法
2万
查看次数

ORM UniqueConstraint,空值重复

我有一个对 3 个字段具有唯一约束的实体。

2 个字段不可为空,第三个字段可以为空。

我的问题,当第三个字段为空时,唯一约束不起作用,所以我可以在我的数据库中有一些重复的值,比如 (5,1,null)(5,1,null)

对我来说, (5,1,null)是一个独特的值,也有 null。

你有什么想法 ?

这是我的 ORM 线:

* @ORM\Table(name="table", uniqueConstraints={@ORM\UniqueConstraint(name="table_idx", columns={"field1", "field2", "field3"})})
Run Code Online (Sandbox Code Playgroud)

编辑:可为空值是其他实体的外键,所以我不能放置自定义值。它是一个实体或空值。

orm unique-constraint symfony

5
推荐指数
2
解决办法
2053
查看次数

Flask-sqlalchemy 独特的约束不起作用

我试图弄清楚为什么字段的“唯一”约束不起作用。我正在使用 Flask、SQLAlchemy 和 Sqlite。

考虑模型:

from app import db
from flask_login import UserMixin

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(64))
    email = db.Column(db.String(120), unique=True)

    def __repr__(self):
        return '<User %r>' % self.username
Run Code Online (Sandbox Code Playgroud)

我希望,由于用户名字段有一个唯一约束,它不允许我添加具有相同用户名的用户。不过,确实如此。

从外壳:

from app import db
from app.models import User

user = User(username='test')
user2 = User(username='test')

db.session.add(user)
db.session.commit()

db.session.add(user2)
db.session.commit()

User.query.all()
Run Code Online (Sandbox Code Playgroud)

输出:

[<User 'test'>, <User 'test'>]
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

python sqlalchemy unique-constraint

5
推荐指数
1
解决办法
1797
查看次数

Postgres - 基于另一列在列中设置唯一约束

我有一个这样的表:

\n\n
CREATE TABLE schema.mytable\n(\n  id serial NOT NULL,\n  number integer NOT NULL,\n  state boolean NOT NULL,\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我需要创建一组唯一的 \xc2\xb4number\xc2\xb4 但是,状态列必须为 true;如果状态列为假,则数字可以重复,这是我需要有效的示例:

\n\n
id  number      state\n1   123         true\n2   124         true\n3   125         true\n4   123         false\n5   129         false\n
Run Code Online (Sandbox Code Playgroud)\n\n

如您所见,数字 123 被重复,但在一种情况下状态为 false,另一种情况为 true;这是不正确的:

\n\n
id  number      state\n1   123         true\n2   124         true\n3   125         true\n4   123         true (*incorrect)\n5   129         false\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,123也有可能以错误状态重复两次或更多次;我怎样才能实现这个目标?

\n

sql postgresql database-design unique-constraint sql-insert

5
推荐指数
1
解决办法
2585
查看次数