栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JPA 2.0:TYPE表达式异常

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JPA 2.0:TYPE表达式异常

忘了我之前说的话。这将适用于

SINGLE_TABLE
策略:

@Entity@Table(name="PERSON")@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="GENDER", discriminatorType=DiscriminatorType.STRING, length=6)public abstract class Person implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @SequenceGenerator(name="PERSON_PERSONID_GENERATOR", sequenceName="PERSON_ID_SEQ")    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PERSON_PERSONID_GENERATOR")    @Column(name="PERSON_ID", updatable=false, unique=true, nullable=false, precision=22)    private long personId;    @Column(nullable=false, length=32)    private String surname;    @Column(name="GIVEN_NAME", nullable=false, length=32)    private String givenName;    // ...}@Entity@DiscriminatorValue("FEMALE")public class Daughter extends Person implements Serializable {    @Column(name="NUMBER_OF_DOLLS", precision=22)    private int numberOfDolls;    // ...}@Entity@DiscriminatorValue("MALE")public class Son extends Person implements Serializable {    @Column(name="NUMBER_OF_TOY_CARS", precision=22)    private Integer numberOfToyCars;    // ...}// JUnit test methodpublic void testInheritance() {    EntityManager em = createNewEntityManagerInstance();    EntityTransaction tx = em.getTransaction();    tx.begin();    Daughter d = new Daughter();    d.setGivenName("Sue");    d.setSurname("Smith");    d.setNumberOfDolls(5);    em.persist(d);    Son s = new Son();    s.setGivenName("Joe");    s.setSurname("Smith");    s.setNumberOfToyCars(8);    em.persist(s);    tx.commit();    Query q;    List<?> personList;    Person p;    q = em.createQuery("SELECt p FROM Person p WHERe TYPE(p) = Daughter");    personList = q.getResultList();    assertEquals(1, personList.size());    p = (Person)personList.get(0);    System.out.println(        "This Daughter is: " + p.getGivenName() + " " + p.getSurname());    q = em.createQuery("SELECt p FROM Person p WHERe TYPE(p) = Son");    personList = q.getResultList();    assertEquals(1, personList.size());    p = (Person)personList.get(0);    System.out.println(        "This Son is: " + p.getGivenName() + " " + p.getSurname());    q = em.createQuery("SELECt p FROM Person p");    personList = q.getResultList();    assertEquals(2, personList.size());    for (Object o : personList) {        assertTrue(o instanceof Person);        p = (Person)o;        System.out.println( "This person is: " + p.getGivenName() + " " + p.getSurname());    }    em.close();}

数据库(我正在使用Oracle)DDL如下所示:

CREATE TABLE "DEV"."PERSON"  (  "PERSON_ID" NUMBER NOT NULL ENABLE,   "GIVEN_NAME" VARCHAr2(32 BYTE) NOT NULL ENABLE,   "SURNAME" VARCHAr2(32 BYTE) NOT NULL ENABLE,   "GENDER" VARCHAr2(6 BYTE) NOT NULL ENABLE,   "NUMBER_OF_DOLLS" NUMBER,   "NUMBER_OF_TOY_CARS" NUMBER,    ConSTRAINT "PERSON_PK" PRIMARY KEY ("PERSON_ID")  );

现在,您说您正在尝试使用

TABLE_PER_CLASS
策略。由于 JPA 2.0规范说不需要供应商支持它,因此
我在这里不能为您提供帮助。您的实现可能无法通过JPA接口正确地支持它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号