class MyFile{
@Embedded
FileHeader header; // getter/setter
}@Embeddable
abstract class FileHeader{ // @Embeddable 能是Abstract吗?
}@Embeddable
class MyFileHeader{
//...
}main(..){ MyFile myFile = new MyFile();
myFile.setHeader(new MyFileHeader()); //以此实现多态,JPA支持吗?
}
@Embedded
FileHeader header; // getter/setter
}@Embeddable
abstract class FileHeader{ // @Embeddable 能是Abstract吗?
}@Embeddable
class MyFileHeader{
//...
}main(..){ MyFile myFile = new MyFile();
myFile.setHeader(new MyFileHeader()); //以此实现多态,JPA支持吗?
}
解决方案 »
- 一个axis2的webservice调用错误,当家帮忙看看怎么解决呀。
- 在Servlet中out.println("")输出HTML到jsp页面,如何才能点击输出的文字来触发servlet中的事件?
- 在mysql上添加触发器后报个奇怪的错
- 求解!
- mysql+ssh(Save保存报错)
- 下拉列表框显示为10行 里面共有5行数据 提交后 如何全部获得5行数据?
- 动态可编辑下拉菜单的实现
- 如何把double类型的变量加载到arraylist中去,我用如下方法试了,但是不行!!请大虾近来指教一下!
- 请问session是不是可以集成?
- 向剑心,晓彬,体力劳动者等说声对不起!也请回答过我问题的高手进来一下!
- 请问有空间,有域名。如何绑定?
- sql_count问题
楼主【blacksky115】截止到2008-06-25 10:44:16的历史汇总数据(不包括此帖):
发帖数:3 发帖分:230
结贴数:2 结贴分:130
未结数:1 未结分:100
结贴率:66.67 % 结分率:56.52 %
楼主加油
尝试不习惯的东西叫改变
尝试不会的东西叫学习
尝试会的东西叫复习
(!@#¥(*#……¥(@&#)¥@
你说的不对,
@Embeddable类可以继承,
继承了的字段也可以生成到数据库中。
//Embeddable类是BaseInfo,其中UserBaseInfo继承自BaseInfo
@Entity
@Table(name = "Users")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name= "BBB",discriminatorType=DiscriminatorType.INTEGER)
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "customer_gen")
@TableGenerator(name = "customer_gen",
table = "tb_generator",
pkColumnName = "gen_name",
valueColumnName = "gen_value",
pkColumnValue = "id",allocationSize = 1)
private Long id;
private String name;
@Embedded
private BaseInfo baseInfo;
get/set......
}@Embeddable
public class BaseInfo implements java.io.Serializable {
private String baseName;
get/set......
}
//UserBaseInfo类继承BaseInfo类
@Embeddable
public class UserBaseInfo extends BaseInfo implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String address;
private String email;
private String telephone;
get/set......
}
//Man类继承User类
@Entity
@DiscriminatorValue(value="2")
public class Man extends User implements Serializable {
private String manName;
get/set......
}
//Woman类继承User类
@Entity
@DiscriminatorValue(value="1")
public class Woman extends User implements Serializable {
private String womainName;
get/set......
}
//测试类如下
public class Main extends User {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Main m = new Main();
UserBaseInfo userBaseInfo = new UserBaseInfo();
userBaseInfo.setBaseName("haha112");
userBaseInfo.setAddress("黑龙江");
userBaseInfo.setEmail("[email protected]");
Man man = new Man();
man.setManName("男人aaaa");
man.setBaseInfo(userBaseInfo);
m.persist(man);
} public void persist(Object object) {
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("TestjpaPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
}
persistence.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="TestjpaPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>testjpa.User</class>
<class>testjpa.Man</class>
<class>testjpa.Woman</class>
<class>testjpa.MutiKeyTable</class>
<class>testjpa.SinglePrimary</class>
<properties>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
<property name="hibernate.connection.password" value="123456"/>
<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://localhost:1433/testjpa"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>数据库字段如下
BBB id baseName name manName womanName
2 1 haha112 NULL 男人aaaa NULL可以说明继承类的字段没有被影射到数据库如果你在User类里面把BaseInfo 换成 UserBaseInfo的话,数据库字段如下BBB id address email telephone name manName womanName
2 1 哈尔滨333333333 [email protected] NULL NULL 男人aaaa NULL
可以看出BaseInfo中的baseName没有被映射到数据库代码不全,可能有不对的地方,请指正