加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

symfony – @UniqueConstraint和@Column(unique = true)选项之间

发布时间:2020-12-15 04:30:22 所属栏目:Java 来源:网络整理
导读:在数据库级别,使用一个选项而不是另一个选项来定义UNIQUENESS没有区别,如下所示.尽管@UniqueConstraint在其文档中读到“它只在SchemaTool模式生成上下文中有意义”,但它们之间是否存在ORM级别差异?我的意思是当我们运行查询时,处理的事情会有所不同吗 @Uniq
在数据库级别,使用一个选项而不是另一个选项来定义UNIQUENESS没有区别,如下所示.尽管@UniqueConstraint在其文档中读到“它只在SchemaTool模式生成上下文中有意义”,但它们之间是否存在ORM级别差异?我的意思是当我们运行查询时,处理的事情会有所不同吗

> @UniqueConstraint
> @Column(unique = true)

示例 – @UniqueConstraint

/**
 * @ORMEntity
 * @ORMTable(
 *      name="user",*      uniqueConstraints={
 *          @ORMUniqueConstraint(columns={"email"})
 *      }
 * )
 */
class User
{
    /**
     * @ORMColumn(name="email",type="string",length=100)
     */
    private $email;
}

DQL

CREATE TABLE `user` (
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,UNIQUE KEY `UNIQ_8D93D649E7927C74` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

示例 – @Column – unique = true

/**
 * @ORMEntity
 * @ORMTable(name="user")
 */
class User
{
    /**
     * @ORMColumn(name="email",length=100,unique=true)
     */
    private $email;
}

DQL

CREATE TABLE `user` (
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,UNIQUE KEY `UNIQ_8D93D649E7927C74` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

解决方法

基本上没有区别.两者都在列上创建唯一键.

但是@UniqueConstraint有更多的可能性.使用@UniqueConstraint,您可以为密钥指定名称或跨多个列.缺点是输入更多(不是更糟),列名必须是数据库中的列名,而不是php属性名.

@Column上的unique = true是在单个列上创建唯一键的最简单方法.

在运行查询时,没有区别. ORM不关心唯一的定义.特别是在插入时,您会从数据库中获取有关唯一性违规的崩溃,而不是来自ORM.您必须自己确保唯一性,例如在Symfony中使用唯一的实体验证.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读