You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Hibernate多对多关联配置从XML方式切换为注解方式?

把Hibernate多对多XML配置转为注解方式的步骤

没问题,我来帮你把这段XML配置转换成对应的Hibernate注解,完全对应原来的配置项,一步一步来:

首先,你需要在Supplier类的Units字段上添加以下注解,同时要导入对应的包(注意根据你的Hibernate版本选择javax.persistence或jakarta.persistence):

完整代码示例

// 导入必要的包
import jakarta.persistence.*; // Hibernate 6+用这个,5.x及以下用javax.persistence.*
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Immutable;
import java.util.Set;

public class Supplier {
    // 其他字段和方法...

    @ManyToMany(targetEntity = com.org.Unit.class)
    @JoinTable(
        name = "UNIT", // 对应XML中的table="UNIT"
        joinColumns = @JoinColumn(name = "ID"), // 对应XML中的<key column="ID"/>
        inverseJoinColumns = @JoinColumn(name = "U_ID") // 对应XML中的<many-to-many column="U_ID"/>
    )
    @Immutable // 对应XML中的mutable="false",标记集合为只读不可修改
    @Cache(usage = CacheConcurrencyStrategy.READ_ONLY) // 对应XML中的<cache usage="read-only"/>
    private Set<Unit> Units;

    // 对应的getter和setter(如果需要的话,不过因为是只读,setter可以考虑只在初始化时使用)
}

注解与原XML配置的对应关系

  • @ManyToMany:替代XML中的<many-to-many>标签,targetEntity属性指定关联的实体类,对应XML里的class="com.org.Unit"。如果Unit类已经通过import导入,这里可以简化为targetEntity = Unit.class。
  • @JoinTable:用来配置多对多的中间表:
    • name属性对应XML中的table="UNIT";
    • joinColumns配置当前Supplier实体在中间表的外键列,对应XML的<key column="ID"/>;
    • inverseJoinColumns配置关联的Unit实体在中间表的外键列,对应XML的<many-to-many column="U_ID"/>。
  • @Immutable:对应XML中的mutable="false",告诉Hibernate这个集合是只读的,不会跟踪对它的修改操作(比如添加、删除元素)。
  • @Cache:对应XML中的<cache usage="read-only"/>,指定集合的缓存策略为只读,需要导入Hibernate专属的org.hibernate.annotations.Cache注解。

注意事项

  • 如果你的Hibernate版本是5.x或更早,记得把jakarta.persistence换成javax.persistence;
  • 因为配置了@Immutable,这个集合应该只做查询使用,尽量不要在业务代码中修改它,否则Hibernate不会同步这些修改到数据库;
  • 如果Supplier和Unit的关联是双向的,你还需要在Unit类中配置对应的@ManyToMany注解,并设置mappedBy属性指向Supplier的Units字段,不过你的XML配置里没有提到双向关联,所以如果是单向的话就不用管这部分。

内容的提问来源于stack exchange,提问作者Sourabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:27:15