• 其他装饰器
    • @Index
    • @Unique
    • @Check
    • @Transaction, @TransactionManager@TransactionRepository
    • @EntityRepository

    其他装饰器

    @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等),因为它们目前还在实验状态。期待将来看到他们的文档。