标签: unique-constraint

如何交换受唯一索引限制的值对

我们有一个基于 Hibernate (33.) 的 Web 应用程序,并发现与交换受唯一索引限制的数据值对相关的问题。在我们的机票 HBM 中,我们有

<many-to-one name="participants" class="net.umbrella.entity.ParticipantModel" fetch="select">
    <column name="PARTICIPANTID" not-null="false" />
</many-to-one>
<many-to-one name="flights" class="net.umbrella.entity.FlightModel" fetch="select">
    <column name="FLIGHTID" not-null="true" />
</many-to-one>
Run Code Online (Sandbox Code Playgroud)

从功能上讲,可以采用分配给参与者 P1 的票证 A 和分配给参与者 P2 的票证 B 的数据对并交换两个参与者。票证 A 最终将分配给参与者 P2,票证 B 将分配给参与者 P1。然而,FLIGHTID + PARTICIPANTID 有一个唯一的约束。

当 Hibernate 发出第一次更新以将票证 A 上的参与者 P1 更改为 P2 时,会引发 GenericJDBCException

Attempt to insert duplicate key row in object 'FLIGHTTICKET' with unique index 'IDX_FLIGHTTICKET_UQ'
Run Code Online (Sandbox Code Playgroud)

有人对此有共同的解决方案吗?

谢谢西蒙

hibernate unique-constraint

3
推荐指数
1
解决办法
1360
查看次数

用于检查值是否在另一个表中不存在的 SQL 约束

在我的 PostgreSQL 9.4数据库中,我有一个包含唯一值fields列的表name

我正在创建一个fields_new具有类似结构(此处不重要)和一列的新表name。我需要一种方法来约束name要插入到fields_new不存在于fields.name.

例如,如果fields.name包含值'color''length',我需要防止fields_new.name包含'color''length'值。因此,换句话说,我需要提供name两个表中的列之间没有任何重复值。约束应该是双向的。

sql postgresql database-design constraints unique-constraint

3
推荐指数
1
解决办法
6355
查看次数

主键和唯一约束之间的主要区别是什么?

我回答说表只有一个主键,但可以有许多唯一的约束。但还有什么?

sql primary-key unique-constraint

3
推荐指数
1
解决办法
3430
查看次数

如何防止在 CoreData 中与 Swift 覆盖合并时对多关系 NSManagedObject 重复?

我的 Swift 应用程序从在线 API 以 JSON 形式下载 3 个数据库,然后将 JSON 对象转换为 CoreData 对象,因此该应用程序可以在互联网访问之外运行。

我有一个实体客户端,它与地址类型的实体有 toMany 关系。地址与实体客户端具有一对一的关系。

客户 <-->> 地址

客户端到地址关系具有级联删除规则,地址到客户端关系具有无效删除规则。

客户端对 id 属性有唯一性约束,并且上下文始终使用 NSMergePolicyType.overwriteMergePolicyType。

当实例化一个新的 Client NSManagedObject 时,保存上下文,并找到具有相同 ID 的 Client,新的 Client 会覆盖旧的 Client,但有一个很大的警告 - 由于某种未知的原因,旧的 Address 对象仍然存在,现在链接到新客户。这会在每次重新加载缓存/数据库时生成每个地址的新副本。

我有多个具有像这样的关系和唯一性的实体,它们会遇到相同的结果 - 多个对象实例的重复。

对于像 Address 这样的对象,没有一个属性可以封装容器中所有其他 Address 对象之间的唯一性。它必须是所有属性(地址 1、地址 2、城市、州、邮政编码等)的总和,并根据另一个地址的所有属性的总和检查唯一性。所以我不确定如何通过唯一性约束来实现这一点 - 据我所知,唯一性约束不能用 if 逻辑来扩展。

另一个解决方案是更改策略的合并行为,或创建自定义合并策略,以确保它在用新对象替换之前实际删除旧对象(级联到多对多关系对象)。

我对 CoreData 或 Objective-c 不太熟悉,无法跟踪迄今为止我在该主题上找到的任何内容。

有没有人对如何 A. 扩展唯一性约束功能、B. 定义合并策略行为或 C. 以其他方式防止上述地址对象重复有建议?

编辑:

我怀疑我对唯一性约束的假设是错误的 - 请参阅我关于它的单独问题

core-data unique-constraint swift nsmergepolicy

3
推荐指数
1
解决办法
1333
查看次数

获取 AttributeError:模块 'django.db.models' 在 Django 1.11 中没有属性 'UniqueConstraint'

我正在使用 Django 1.11,当尝试导入时UniqueConstraint,我的情况很糟糕

AttributeError:模块“django.db.models”没有属性“UniqueConstraint”

错误。我不想降级到 unique_together,因为它似乎被贬值了。那么为什么我在最新版本的 Django 中遇到这个错误?

我通过以下方式导入它:

from django.db import models

class CalendarAccount(models.Model):
    
    class Meta:
        managed = False
        db_table = 'my_table'
        constraints = [
            models.UniqueConstraint(...),
        ]
Run Code Online (Sandbox Code Playgroud)

python django unique-constraint

3
推荐指数
1
解决办法
2398
查看次数

具有空值的复合唯一约束

如何在 SQLite 中设置可以正确处理空值的复合唯一约束?通过示例可能可以更好地表达这一点:

CREATE TABLE people (
    id INTEGER PRIMARY KEY,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    suffix TEXT,
    UNIQUE (first_name, last_name, suffix)
);
Run Code Online (Sandbox Code Playgroud)

当多次输入带有后缀的人物时,该约束将按预期工作。

-- Last insert is denied
INSERT INTO people (first_name, last_name, suffix)
VALUES
    ('Joe', 'Dirt', 'Sr'),
    ('Joe', 'Dirt', 'Jr'),
    ('Joe', 'Dirt', 'Sr');
Run Code Online (Sandbox Code Playgroud)

然而,当多次插入没有后缀的人时,唯一约束就无法适应。

-- Both are permitted
INSERT INTO people (first_name, last_name)
VALUES
    ('Chris', 'Farley'),
    ('Chris', 'Farley');
Run Code Online (Sandbox Code Playgroud)

我知道 SQLite 将 null 值视为彼此独立,但是有没有办法解决这个问题?

sql sqlite unique-constraint

3
推荐指数
1
解决办法
816
查看次数

在插入Doctrine之前,检查数据库中是否已存在实体

每当我插入已存在于数据库中的实体时,我都会收到错误,因为其中一个字段(email)存在唯一约束.

所以我想检查它是否已经存在; 如果没有,我插入它.

我的代码看起来像这样:

$q = Doctrine_Query::create()
    ->from('User u')
    ->where('u.email = ?', $email);

$object = $q->fetchOne();

if( ! is_object($object)) {
          $user = new User();
          $user-email = $email;
          $user->save();
    }
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

doctrine unique-constraint

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

使用基于函数的索引延迟唯一约束?

我认为这会有点深奥,但想把它扔出去,万一有人试过这样的事情,或者如果某人已经尝试过并发现它是不可能的.

我们有一个表需要对某组列进行唯一性约束,但它也有一个"软删除"指示符.已标记为"已删除"的记录不应包含在唯一性检查中.

这一切都很好,我可以使用独特的基于函数的索引轻松解决这个问题.然而,使问题复杂化的是,如果我们要在数据库中实现这个约束,它必须是延迟约束,因为Hibernate的工作方式.如果无法完成,我们将不得不省略约束,而我根本不愿意.

例如:

CREATE TABLE jkemp_test
  ( id NUMBER NOT NULL
  , deleted_ind CHAR(1) DEFAULT 'N' NOT NULL);

CREATE UNIQUE INDEX jkemp_test_funique
  ON jkemp_test
  (CASE WHEN deleted_ind = 'N' THEN id END);

-- make this use the function-based index, maybe?
ALTER TABLE jkemp_test
  ADD CONSTRAINT jkemp_test_unique
  UNIQUE (id)
  DEFERRABLE INITIALLY DEFERRED;

INSERT INTO jkemp_test VALUES (1,'N');
INSERT INTO jkemp_test VALUES (2,'N');

COMMIT;

UPDATE jkemp_test SET deleted_ind='Y' WHERE id=1;

COMMIT;

-- depending on whether the constraint is deferred or not, …
Run Code Online (Sandbox Code Playgroud)

sql oracle unique-constraint

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

Hibernate:@UniqueConstraint跨多个表?

我有一个数据模型,其中许多实体从单个超类实体继承一些公共属性.我InheritanceType.JOINED在超类上使用,这导致Hibernate为超类中定义的属性创建单个表,子类表只包含由子类添加的列(因此要加载子类实例的属性,之间执行连接两个表).这一切都很好.

但是,我想要做的是指定一个唯一约束,该约束包括子类和超类表中的字段.例如,假设我的超类实体是这样的:

Thing: {id, name}
Run Code Online (Sandbox Code Playgroud)

...然后我有一些子类实体,如:

Company: {address}  //inherits 'id' and 'name' from 'Thing'
Employee: {company} //inherits 'id' and 'name' from 'Thing'
Run Code Online (Sandbox Code Playgroud)

...并且我想配置Hibernate以自动强制给定Company不能具有Employee相同名称的两个.该company字段在Employee表中,但该name字段在Thing表中,所以有没有办法让Hibernate强制执行此约束,或者我是否需要在添加新的时以编程方式执行此操作Employee

java inheritance hibernate unique-constraint

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

使用存储过程的具有唯一约束的SQL插入

这是一个具体示例的通用问题.

我有一个包含三个字段的表(genreID(PK IDENTITY),流派和subGenre).该表对(genre,subGenre)组合有唯一约束.

我想知道如果表中不存在,我可以如何修改存储过程以插入,否则返回现有类型的genreID(如果它存在的话).

CREATE PROCEDURE spInsertGenre
    @genreID int OUTPUT,
    @genre varchar(100),
    @subGenre varchar(100)= NULL
AS
BEGIN
    INSERT INTO Genre
    (
        genre,
        subGenre
    )
    Values (
        @genre,
        @subGenre
    )

    SELECT @genreID = SCOPE_IDENTITY()
END
GO
Run Code Online (Sandbox Code Playgroud)

sql stored-procedures insert unique-constraint sql-server-2008-r2

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