Java Hibernate XML子类化与复合键
我想用hibernatesJava 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
连接的子类扩展一个类
问题是,扩展类有一个复合键,而普通类只有一个普通主键(见图)。
有没有实现这种类结构的选项
目前,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();