Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠单个表,查询所有行_Java_Spring_Hibernate_Postgresql 9.3 - Fatal编程技术网

Java 休眠单个表,查询所有行

Java 休眠单个表,查询所有行,java,spring,hibernate,postgresql-9.3,Java,Spring,Hibernate,Postgresql 9.3,因此,我已经习惯于使用Hibernate4和注释一段时间了。传统上,我会在每张桌子上做一节具体的课,做了又做,这对我来说一直都很有效 现在,我仍然在使用Hibernate4.3.11,并且我第一次使用单表层次结构。我有一个主/根类,如下所示: @Entity @Table(name = "mytable") @SuppressWarnings("serial") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Discriminato

因此,我已经习惯于使用Hibernate4和注释一段时间了。传统上,我会在每张桌子上做一节具体的课,做了又做,这对我来说一直都很有效

现在,我仍然在使用Hibernate4.3.11,并且我第一次使用单表层次结构。我有一个主/根类,如下所示:

@Entity
@Table(name = "mytable")
@SuppressWarnings("serial")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "myobject_type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "ABC")
public class MyEntity extends BaseEntity
@Entity
@DiscriminatorValue(value = "XYZ")
public class XyzEntity extends MyEntity
所以,我想知道这个类是否应该是抽象类???看起来没必要这样

子类的定义如下:

@Entity
@Table(name = "mytable")
@SuppressWarnings("serial")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "myobject_type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "ABC")
public class MyEntity extends BaseEntity
@Entity
@DiscriminatorValue(value = "XYZ")
public class XyzEntity extends MyEntity
我为MyEntity创建了一个DAO,这些方法create/update/findById的单元测试似乎都能工作。。。但“getAllList”似乎并不适用

@Override
public List<MyEntity> getAllList()
{
    List<MyEntity> myList = this.sessionFactory.getCurrentSession().createQuery("from MyEntity").list();
    return myList;
}
我应该说数据库中有4条记录。2条记录在“myobject_type”字段中的值为“XYZ”,另一条记录的值为“ABC”

所以,我想知道我是否应该在我的根类中设置一个DiscriminatorValue???我将字段“myobject_type”设置为非空,因此,我将确保每个记录都有一个区分值“ABC”,用于MyEntity的记录,如果创建了XyzEntity,则为“XYZ”指定一个值。同样,新的MNO实体在该字段中的值可能为“MNO”

奇怪的是,在整个层次结构中,如果我有两个子类MyEntity,我能在这两个子实体中都有相同的字段吗?或者,我想我可以移动任何类似的东西,一个在多个地方使用的字段到根实体

同样,这是我第一次在Hibernate中使用单表层次结构,我只需要解决这个错误消息。任何帮助都将不胜感激!!!谢谢


Tom

尝试在查询创建中直接对此值执行SQL查询筛选,而不是使用@DiscriminatorColumn和@DiscriminatorValue执行此操作

 List<MyEntity> myList = this.sessionFactory.getCurrentSession().createQuery("from MyEntity where myobject_type != :pattern").setParameter("pattern", pattern).list();
return myList;
List myList=this.sessionFactory.getCurrentSession().createQuery(“来自MyEntity,其中myobject类型!=:pattern”).setParameter(“pattern”,pattern).List();
返回myList;

您看过这个吗?对我在这个问题上做了广泛的搜索,并且在一个单表层次结构的正确示例上查看了几十页。一些示例表明基类/实体不必是抽象的,我当然可以将类抽象化,问题就解决了。但是如果我正在使用的应用程序确实需要这个根类,我只是想知道我是否可以修复这个问题?在我发布的问题中,用户创建了另一个抽象类,insertable=false,updateable=false,因此您仍然可以使用根类