【问题标题】:Hibernate Envers audit for many to many with composite primary Key not working for parent classesHibernate Envers 审核多对多,复合主键不适用于父类
【发布时间】:2016-06-10 03:02:44
【问题描述】:

我有以下具有多对多关系的实体。在添加到子类时使用@Audited 可以正常工作,但不适用于所有实体 面临编译错误(异常)

员工类

    @Entity
    @Table(name = EMPLOYEE)
    @Audited
    public class Employee implements java.io.Serializable {

    @EmbeddedId
        @AttributeOverrides({
                @AttributeOverride(name = "Id", column = @Column(name = "ID", nullable = false, length = 50) ),
                @AttributeOverride(name = "department", column = @Column(name = "DEPARTMENT", nullable = false, length = 10) ) })
        private DepartmentId id;

        @Column(name = "NAME", length = 50)
        private String name;

@OneToMany(mappedBy = "key.emp", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER,orphanRemoval=true)
        private Set<EmpAddress> empAddMap = new HashSet<EmpAddress>();


    }

Employee 的复合主键类

    @Component
    @Embeddable
    @Audited
    public class DepartmentId implements java.io.Serializable {

        @Column(name = "ID", nullable = false, length = 50)
        private String id;

        @Column(name = "DEPARTMENT", nullable = false, length = 10)
        private String department; 

    }

地址类

    @Entity
    @Table(name = "ADDRESS")
    @Audited
    public class Address implements java.io.Serializable {

        private static final long serialVersionUID = 5070283391974818811L;

        @Id
        @Column(name = "CITY", unique = true, nullable = false, length = 50)
        private String city

        @Column(name = "CONTACT")
        private String contact;

    @OneToMany(mappedBy = "key.address", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
        private Set<EmpAddress> empAddMap = new HashSet<EmpAddress>();
    }

映射类与员工和地址的多对多关系

    @Entity
    @Table(name = "EMPLOYEE_ADDRESS", catalog = "LRR")
    @AssociationOverrides({
            @AssociationOverride(name = "key.emp", joinColumns = { @JoinColumn(name = "ID"),
                    @JoinColumn(name = "DEPARTMENT") }),
            @AssociationOverride(name = "key.address", joinColumns = @JoinColumn(name = "CITY") ) })
    @Audited
    public class EmpAddress {

        @EmbeddedId
        private EmpAddId key = new EmpAddId();

        @Column(name = "STATUS_ID")
        private String statusId;

    }

映射实体的复合主键类

    @Embeddable
    public class EmpAddId implements Serializable {
        @ManyToOne(cascade = CascadeType.ALL)
        private Employee emp;
        @ManyToOne(cascade = CascadeType.ALL)
        private Address address;

【问题讨论】:

    标签: spring hibernate hibernate-envers


    【解决方案1】:

    我认为 envers 不支持复合 ID。这里有一个类似的转机案例: Composite table with Hibernate Envers

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 2013-08-27
      • 2011-09-13
      • 2019-07-27
      • 2023-03-24
      • 2017-05-07
      相关资源
      最近更新 更多