【问题标题】:java persistence cross object method accessjava持久化跨对象方法访问
【发布时间】:2016-02-25 02:19:26
【问题描述】:

我以 Employee 和 Company 类为例。在 Java 持久性环境 (Hibernate) 中,当 bean 使用自己的实体管理器处理 Employee 类时,当该对象具有自己的实体管理器时,如何调用 Company 类 bean 方法?我是否必须进行一对一映射,还是可以通过应用程序配置以某种方式调用该方法?

谢谢。

【问题讨论】:

    标签: java hibernate persistence javabeans entitymanager


    【解决方案1】:

    您可以使用一对一的映射。我最近在产品和团队课程中实施了。我已将产品标记为实体,将团队标记为实体。下面是使它工作所需的代码。还有其他配置方法。在下面的配置中,您需要一张表来存储产品,一张表来存储团队,第三个团队来存储 productid 和 teamid。

    ***Product Class**
    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;
    import javax.persistence.OrderBy;
    import javax.persistence.Table;
    import javax.persistence.Transient;
    
    import org.codehaus.jackson.annotate.JsonBackReference;
    import org.codehaus.jackson.annotate.JsonIgnoreProperties;
    
    @Entity
    @Table(name="Product")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    public class Product implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = -5392649457041674962L;
    
        @Id
        @Column(name="productId")
        @GeneratedValue
        private Long productId;
    
        @Column(name="productName")
        private String productName;
    
        @Column(name="productHasVariations")
        private String productHasVariations;
    
        @Column(name="productImgPath")
        private String productImgPath;
    
        @Column(name="productDesc")
        private String productDesc;
    
    //  //---------------------------------------item mapped to league------------------------------------------//
        @JsonBackReference
        @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
        @JoinTable(
                name="ProductLeague",
                joinColumns= @JoinColumn(name="productId"),
                inverseJoinColumns = @JoinColumn(name="leagueId")
        )
        private League league;
    //  //--------------------------------------------------------------------------------------------------------//
    //
        //  //---------------------------------------item mapped to category------------------------------------------//
        @JsonBackReference 
        @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
        @JoinTable(
                name="ProductCategory",
            joinColumns= @JoinColumn(name="productId"),
                inverseJoinColumns = @JoinColumn(name="categoryId")
        )
        private Category category;
    //  //--------------------------------------------------------------------------------------------------------//
    //  
    //  //---------------------------------------item mapped to team------------------------------------------//
        @JsonBackReference 
        @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
        @JoinTable(
                name="ProductTeam",
                joinColumns= @JoinColumn(name="productId"),
                inverseJoinColumns = @JoinColumn(name="teamId")
        )
        private Team team;
    //  //--------------------------------------------------------------------------------------------------------//
    //  
    //  //---------------------------------------item mapped to flags such as featured, sale, hot, new------------//
        @JsonBackReference 
        @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
        @JoinTable(
            name="ProductFlag",
            joinColumns= @JoinColumn(name="productId"),
                inverseJoinColumns = @JoinColumn(name="flagId")
        )
        private Flag flag;
        //--------------------------------------------------------------------------------------------------------//
    //  
        //---------------------------------------item mapped to sizes ------------//
        @JsonBackReference 
        @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
        @OrderBy("sizeId asc")
        @JoinTable(
                name="ProductSize",
                joinColumns= @JoinColumn(name="productId"),
                inverseJoinColumns = @JoinColumn(name="sizeId")
        )
        private Set<Size> size;
    //  //--------------------------------------------------------------------------------------------------------//
        //---------------------------------------item mapped to prices ------------//
        @JsonBackReference 
        @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
        @OrderBy("priceId asc")
        @JoinTable(
                name="ProductPrice",
                joinColumns = { @JoinColumn(name="productId")
                             },
                inverseJoinColumns = @JoinColumn(name="priceId")
        )
        private Set<Price> price;
    //  //--------------------------------------------------------------------------------------------------------//
    
    
    
        //  //--------------------------------------------------------------------------------------------------------//
        //---------------------------------------item mapped to discounts ------------//
        @JsonBackReference 
        @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
        @JoinTable(
                name="ProductDiscount",
                joinColumns = { @JoinColumn(name="productId")
                             },
                inverseJoinColumns = @JoinColumn(name="discountId")
        )
        private Discount discount;
    //  //--------------------------------------------------------------------------------------------------------//
    
        @Transient
        private Long productQuantity;
    
        @Transient
        private String productPriceBeforeDiscount;
    
        @Transient
        private String productPriceAfterDiscount;
    
        @Transient
        private String productSelectedSize;
    
        public Flag getFlag() {
            return flag;
        }
    
        public void setFlag(Flag flag) {
            this.flag = flag;
        }
    
        public Long getProductId() {
            return this.productId;
        }
    
        public void setProductId(Long productId) {
            this.productId = productId;
        }
    
        public String getProductName() {
            return this.productName;
        }
    
        public void setProductName(String productName) {
            this.productName = productName;
        }
    
    
        public void setProductHasVariations(String productHasVariations) {
            this.productHasVariations = productHasVariations;
        }
    
        public String getProductHasVariations() {
            return productHasVariations;
        }
    
        public void setLeague(League league) {
            this.league = league;
        }
    
        public League getLeague() {
            return league;
        }
    
        public Category getCategory() {
            return this.category;
        }
    
        public void setCategory(Category category) {
            this.category = category;
        }
    
        public Team getTeam() {
            return this.team;
        }
    
        public void setTeam(Team team) {
            this.team = team;
        }
    
        public String getProductImgPath() {
            return productImgPath;
        }
    
        public void setProductImgPath(String productImgPath) {
            this.productImgPath = productImgPath;
        }
    
        public void setProductDesc(String productDesc) {
            this.productDesc = productDesc;
        }
    
        public String getProductDesc() {
            return productDesc;
        }
    
        public void setSize(Set<Size> size) {
            this.size = size;
        }
    
        public Set<Size> getSize() {
            return size;
        }
    
        public void setPrice(Set<Price> price) {
            this.price = price;
        }
    
        public Set<Price> getPrice() {
            return price;
        }
    
        public void setProductQuantity(Long productQuantity) {
            this.productQuantity = productQuantity;
        }
    
        public Long getProductQuantity() {
            return productQuantity;
        }
    
        public void setDiscount(Discount discount) {
            this.discount = discount;
        }
    
        public Discount getDiscount() {
            return discount;
        }
    
        public void setProductPriceAfterDiscount(String productPriceAfterDiscount) {
            this.productPriceAfterDiscount = productPriceAfterDiscount;
        }
    
        public String getProductPriceAfterDiscount() {
            return productPriceAfterDiscount;
        }
    
        public void setProductPriceBeforeDiscount(String productPriceBeforeDiscount) {
            this.productPriceBeforeDiscount = productPriceBeforeDiscount;
        }
    
        public String getProductPriceBeforeDiscount() {
            return productPriceBeforeDiscount;
        }
    
        public void setProductSelectedSize(String productSelectedSize) {
            this.productSelectedSize = productSelectedSize;
        }
    
        public String getProductSelectedSize() {
            return productSelectedSize;
        }
    
    }
    

    ****TeamClass********

    导入 java.util.Set;

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    
    import java.io.Serializable;
    @Entity
    @Table(name="Team")
    public class Team implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = 5969057417203282157L;
    
        @Id
        @Column(name="teamId")
        @GeneratedValue
        private Integer teamId;
    
        @Column(name="teamName")
        private String teamName;
    
        @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
        @JoinTable(
                name="ProductTeam",
                joinColumns = @JoinColumn(name="teamId"),
                inverseJoinColumns = @JoinColumn(name="productId")
        )
        public Set<Product> product;
    
        public Integer getTeamId() {
            return this.teamId;
        }
    
        public void setTeamId(Integer teamId) {
            this.teamId = teamId;
        }
        public String getTeamName() {
            return teamName;
        }
    
        public void setTeamName(String teamName) {
            this.teamName = teamName;
        }
    
        public Set<Product> getProduct() {
            return product;
        }
    
        public void setProduct(Set<Product> product) {
            this.product = product;
        }
    
    }
    

    【讨论】:

    • 感谢您的回复。我希望我可以通过应用程序上下文调用其他对象方法。仅更新不同的对象/表似乎非常繁重。
    猜你喜欢
    • 2011-09-12
    • 2010-09-28
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多