其他装饰器

@Index

此装饰器允许你为特定列创建数据库索引。它还允许你将列或列标记为唯一。此装饰器可以应用于列或实体本身。单列索引时使用或多列索引时使用。例如:

  1. @Entity()
  2. export class User {
  3. @Index()
  4. @Column()
  5. firstName: string;
  6. @Index({ unique: true })
  7. @Column()
  8. lastName: string;
  9. }
  1. @Entity()
  2. @Index(["firstName", "lastName"])
  3. @Index(["lastName", "middleName"])
  4. @Index(["firstName", "lastName", "middleName"], { unique: true })
  5. export class User {
  6. @Column()
  7. firstName: string;
  8. @Column()
  9. lastName: string;
  10. @Column()
  11. middleName: string;
  12. }

了解有关 indices的更多信息。

@Unique

此装饰器允许你为特定列创建数据库唯一约束。该装饰器只能应用于实体本身。

例如:

  1. @Entity()
  2. @Unique(["firstName"])
  3. @Unique(["lastName", "middleName"])
  4. @Unique("UQ_NAMES", ["firstName", "lastName", "middleName"])
  5. export class User {
  6. @Column()
  7. firstName: string;
  8. @Column()
  9. lastName: string;
  10. @Column()
  11. middleName: string;
  12. }

注意:MySQL 将唯一约束存储为唯一索引

@Check

此装饰器允许为特定列创建数据库检查约束。该装饰器只能应用于实体本身。

例如:

  1. @Entity()
  2. @Check(`"firstName" <> 'John' AND "lastName" <> 'Doe'`)
  3. @Check(`"age" > 18`)
  4. export class User {
  5. @Column()
  6. firstName: string;
  7. @Column()
  8. lastName: string;
  9. @Column()
  10. age: number;
  11. }

注意:MySQL 不支持检查约束。

@Transaction, @TransactionManager@TransactionRepository

@Transaction用于方法上,并将其所有的执行包裹到单个数据库事务中。必须使用@TransportManager提供的管理器执行所有数据库查询或者使用@TransactionRepository注入的事务存储库。例如:

  1. @Transaction()
  2. save(@TransactionManager() manager: EntityManager, user: User) {
  3. return manager.save(user);
  4. }
  1. @Transaction()
  2. save(user: User, @TransactionRepository(User) userRepository: Repository<User>) {
  3. return userRepository.save(user);
  4. }
  1. @Transaction()
  2. save(@QueryParam("name") name: string, @TransactionRepository() userRepository: UserRepository) {
  3. return userRepository.findByName(name);
  4. }

注意:事务中的所有操作必须且只能使用提供的EntityManager实例或注入的存储库。使用任何其他查询源(全局管理器,全局存储库等)将导致错误和错误。

了解有关 transactions的更多信息。

@EntityRepository

将自定义类标记为实体存储库。例如:

  1. @EntityRepository()
  2. export class UserRepository {
  3. /// ... 定制存储库方法 ...
  4. }

你可以使用connection.getCustomRepositoryentityManager.getCustomRepository方法获取任何自定义创建的存储库。

了解有关 custom entity repositories的更多信息。


注意:本参考文献中没有的记录一些装饰器(如@Tree@ChildEntity等),因为它们目前还在实验状态。期待将来看到他们的文档。