有一个名为Product(id,name)的表。 Product中的每一行都是另一种产品。每个产品都有不同的信息数据。例如:“互联网”等产品将包含“当前计划”,“帐号”,“帐户状态”等信息数据。然而,像'保险'这样的产品会有信息数据'收款人','受益人','总存款','总索赔'等等。 还有另一个名为Customer的表。
CREATE TABLE customer
(
id serial NOT NULL,
first_name text NOT NULL,
last_name text NOT NULL,
street_add text NOT NULL,
city text NOT NULL,
state text NOT NULL,
zip text NOT NULL,
phone text NOT NULL,
ssn text,
customer_since timestamp without time zone,
product_id integer NOT NULL,
intro_audio text NOT NULL,
search_params text,
verification_params text,
CONSTRAINT customer_pkey PRIMARY KEY (id),
CONSTRAINT fk_product_id FOREIGN KEY (product_id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
我想为每个产品创建一个表: 例如对于互联网:
CREATE TABLE internet_product_info
(
id serial NOT NULL,
customer_id integer NOT NULL,
current_plan text NOT NULL,
acc_type text NOT NULL,
acc_no text NOT NULL,
CONSTRAINT internet_product_info_pkey PRIMARY KEY (id),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id)
REFERENCES customer(id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
保险:
CREATE TABLE insurance_product_info
(
id serial NOT NULL,
customer_id integer NOT NULL,
payee text NOT NULL,
beneficiary text NOT NULL,
total_deposits integer NOT NULL,
total_claims integer NOT NULL,
CONSTRAINT insurance_product_info_pkey PRIMARY KEY (id),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id)
REFERENCES customer(id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
我想问一下这种情况是否适合采用这种方案,或者有更好的选择。
在java中,我将检索产品属性,如:
public class Customer implements Serializable{
private int id;
private String firstName;
private String lastName;
private String streetAdd;
private String city;
private String state;
private String zip;
private String phone;
private String ssn;
private Date customerSince;
private Object internetProdInfo;
private Product product;
}
if(customer.getInternetProdInfo() instanceOf InternetProdInfo){
/* get the info for it*/
}
另外,如何动态地在jsp页面上动态加载这些产品特定字段。
答案 0 :(得分:0)
您可以在Hibernate中使用java继承,如您在此处所述。
if(customer.getInternetProdInfo() instanceOf InternetProdInfo){
/* get the info for it*/
}
在这里,我们可以提供很少的链接,你可以通过它不是一个简单的解决方案,它有自己的一面,还有更多的。
映射的超类没有为其定义单独的表(使用@MappedSuperclass
)。
可以使用@AttributeOverride
和@AssociationOverride
注释或相应的XML元素在这些子类中覆盖
映射信息