@ConditionalOnBean主键的坑

@ConditionalOnBean(A22.class)使用的坑

@ConditionalOnBean(A22.class)的坑

@Slf4j
@Configuration
@ConditionalOnProperty(name = "tea.redis.a")
public class A0Config {
}

@Component
@ConditionalOnBean(A22.class)
public class A1 implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("A1");
    }
}

@Component
@ConditionalOnBean(name = "a22")
public class A12 implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("A12");
    }
}

@Component(value = "a22")
@ConditionalOnBean(A0Config.class)
public class A22 implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("A22");
    }
}

此时并没有配置tea.redis.a
但是输出结果为:
A1
A12

预期应该A22不会创建,故不会出错任何字符。

### 三、@OneToMany 注解映射时是否需要设置关联字段为非主键 在使用 JPA 的 `@OneToMany` 注解进行映射时,**是否需要将关联字段设置为非主键**,取决于映射关系的类型和数据库模型的设计需求。 在单向 `@OneToMany` 映射中,如果主实体(如 `User`)直接维护与从实体(如 `Order`)的关系,则需要通过 `@JoinColumn` 指定一个外键字段,该字段通常不是从实体的主键,而是指向主实体的主键。该外键字段用于建立两个表之间的关联关系。因此,在这种情况下,从实体中的关联字段应设置为非主键字段,以便正确映射到主实体的主键字段 [^2]。 ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany @JoinColumn(name = "user_id") // 外键字段,非 Order 表的主键 private List<Order> orders; } ``` ```java @Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 其他字段,user_id 是外键,不是主键 } ``` 而在双向 `@OneToMany` 映射中,主实体使用 `mappedBy` 属性声明关系由从实体维护。此时,外键字段的定义由从实体中的 `@ManyToOne` 注解负责,并通过 `@JoinColumn` 明确指定其字段名。这种情况下,外键字段依然不是主实体的主键,而是从实体中的一个非主键字段 。 ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "user") private List<Order> orders; } ``` ```java @Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @JoinColumn(name = "user_id") // 外键字段,非 Order 的主键 private User user; } ``` 综上所述,在 `@OneToMany` 映射中,外键字段通常设置为从实体中的非主键字段,以确保数据库表结构的合理性与完整性。无论是单向还是双向映射,都应避免将外键字段设置为主键,除非有特殊的业务需求要求外键作为主键的一部分 [^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值