Java Hibernate XML子类化与复合键

Java Hibernate XML子类化与复合键,java,xml,hibernate,foreign-keys,composite-id,Java,Xml,Hibernate,Foreign Keys,Composite Id,我想用hibernates连接的子类扩展一个类 问题是,扩展类有一个复合键,而普通类只有一个普通主键(见图)。 有没有实现这种类结构的选项 目前,hbm.xml看起来是这样的: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapp

我想用hibernates
连接的子类扩展一个类

问题是,扩展类有一个复合键,而普通类只有一个普通主键(见图)。

有没有实现这种类结构的选项

目前,hbm.xml看起来是这样的:

<?xml version="1.0"?>
  <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  <hibernate-mapping>
<class name="Product" table="products" catalog="test">
     <id name="idProduct" type="java.lang.Integer">
        <column name="idProduct" />
        <generator class="identity" />
    </id>
    <property name="nameProduct" type="string">
        <column name="name_Product" length="45" />
    </property>
    <property name="descriptionProduct" type="string">
        <column name="description_Product" length="45" />
    </property>
    <property name="price1Product" type="string">
        <column name="price1_Product" length="45" />
    </property>
    <property name="price2Product" type="string">
        <column name="price2_Product" length="45" />
    </property> 
     <joined-subclass name="ProductWithSelectedPrice" extends="Product" table="category_has_product">
      <key>
        <column name="Category_idCategory" />
        <column name="Product_idProduct" />
      </key>
            <property name="price" type="java.lang.Integer" column="Product_selectedPrice" />
    </joined-subclass>
     -->
</class>

-->


最重要的是,

首先,我认为在Java OOP中,事实上倾向于组合而不是继承,正如您所看到的,在hibernate中扩展类不是一个好的做法

据我所知,您想要实现多对多关系,您可以这样做:

@Table("Category")
public class Category implements Serializable {

   long id;
   ...
   ...

   @OneToMany(mappedBy = "category", cascade = { CascadeType.ALL }, orphanRemoval = true, fetch = FetchType.LAZY)
   List<Category_has_Product> category_has_Product;


   public List<Category_has_Product> getCategory_has_Product(){
      return this.category_has_Product
   }
}
@Table("Product")
public class Product implements Serializable {

   long id;
   ...
   ...

   @OneToMany(mappedBy = "product", cascade = { CascadeType.ALL }, orphanRemoval = true, fetch = FetchType.LAZY)
   List<Category_has_Product> category_has_Product;
}

public class Category_has_Product implements Serializable {

  @ManyToOne(optional = false)
  Category category;

  @ManyToOne(optional = false)
  Product product;

  public Product getProduct() {
         return this.product;
  }
}

我希望它能有所帮助:D

我可以知道,你们为什么需要这样的结构吗?Hibernate不允许在
中使用复合键。是否有其他方法实现此图?我需要一个结构来选择一个类别(n:m)中产品的价格嗨,我及时解决了这个问题,但目前我没有时间在这里回答这个问题。但是耶亚。我的解决方案看起来和你的差不多。这个想法来自于
Java-persistencewithhibernate
(清单7.1)中的
CategorizedItem
示例。。只要状态正确,剩下的就用hibernate:)
Category category = new CategoryService().findById(101L);
List<Category_has_Product> category_has_Product  = category.getCategory_has_Product();
Product product = category_has_Product.get(0).getProduct();