我有一个场景,下面是超类:-
abstract class Container
{
Long id;
FieldParent parent;
}
class SubContainer extends Container
{
Long extid;
}
abstract class FieldParent
{
Long fid;
String name;
}
class SubField extends FieldParent
{
String typeOfSub;
}
我正在使用每子类表策略使用一个鉴别器下面是容器的hbm映射:-
<class name="Container" table="Container">
<id name="id" type="long" column="ID">
<generator class="native"/>
</id>
<many-to-one name="parent"
class="FieldParent"
cascade="none"
column="FieldParentID"/>
<discriminator column="TYPE"/>
....
<subclass name="SubContainer"
discriminator-value="S"
lazy="true">
<property name="extid" type="long" column="extid" not-null="true"/>
</subclass>
</class>
下面是FieldParent的hbm映射:-
<class name="FieldParent" table="FieldParent">
<id name="fid" type="long" column="FID">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String" column="name" not-null="true"/>
<discriminator column="TYPE_Parent"/>
....
<subclass name="SubField"
discriminator-value="F"
lazy="true">
<property name="typeOfSub" type="java.lang.String" column="typeOfSub" not-null="true"/>
</subclass>
</class>
getHibernateTemplate().find(
"from " + SubContainer.class.getName()
+ " subContainer where subContainer.extid = ? and subContainer.parent.typeOfSub=? ",
new Object[]{new Long(id), "sampeTypeoFSub"});
java.sql.SqlSyntaxerRoreXception:ora-00904:“FieldParent1_3_”.“TypeOFSub”:无效标识符
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1281) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628) [ojdbc6.jar:11.2.0.3.0]
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493) [ojdbc6.jar:11.2.0.3.0]
at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:342) [:6.0.0.Final]
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) [:3.6.10.Final]
at org.hibernate.loader.Loader.getResultSet(Loader.java:1953) [:3.6.10.Final]
TypeOFSub
属性位于SubField
类中,而Container
与FieldParent
具有多对一的关联。
>
fieldparent
您筛选与子类类型的关联:
select subContainer
from SubContainer subContainer
where
subContainer.parent.class = my.package.SubField
subContainer.extid = ? and
subContainer.parent.typeOfSub=?
问题内容: 我有一个名为 Geometry 的基类,在该基类中存在 Sphere 子类: 和一个子类: 我有一个包含所有 Geometry 对象的ArrayList,我想对其进行迭代以检查是否正确读取了文本文件中的数据。到目前为止,这是我的迭代器方法: 如何访问和打印 球体的 半径和中心字段?提前致谢 :) 问题答案: 如果要访问子类的属性,则必须转换为子类。 但是,这并不是最OO的处理方式:一旦
我的背景是C,在那里我们可以使用子类对象访问父类的公共字段。示例: 如何在Java继承中实现同样的功能? 我还有另一个关于覆盖的问题,但由于Stackoverflow规则,我将作为单独的问题提问。 那么,使用子类对象引用打印/访问Java的父类方法的语法应该是什么?我尝试了。等,但不工作。
我试图找到一种很好的方法来迭代并打印出ArrayList中的对象。 问题是我似乎无法到达用户键入对象信息(例如颜色和品牌)的字段。 对象的新实例如下所示: 汽车(以及自行车、公共汽车等其他类别)是汽车的子类。 车辆等级: } 汽车等级: }尝试迭代对象时: 当迭代对象时,我希望达到I.color中的颜色和品牌字符串。但是我猜想,由于我是一个新的对象,它可能无法访问与汽车、公共汽车等相关的字段和方法
问题内容: 众所周知,私有字段不会在类之间继承。令我着迷的是它如何用于内部静态类。考虑以下代码: 您能否解释一下如何访问其他内部类的私有字段?如果合法,为什么只能通过“ super.XXX”构造实现? 问题答案: 内部类是Java的较晚入门。添加它们时,它们仅作为编译器扩展添加,对JVM不变。 语言规范指出,内部类被允许访问在其内声明的类的私有成员。包括其他内部类。 为了使其工作,编译器会生成桥接
我正在努力解决一个奇怪的问题。 控制台是 如您所见,第一行输出了GeneratorField对象的名称,但是为什么第二个命令失败了? 我正在使用Freemarker 2.3.20 谢啦
问题内容: 我有一个类,该类具有一个命名的字段(它与我的类具有相同的类型并具有修饰符): 在该类中,我定义了一个名为的方法,该方法具有一个类型为type的参数。我想知道为什么我可以直接访问实例字段?我的意思是该字段是,不是通过实例受害者无法访问的吗? 问题答案: 隐私不是针对每个实例的,而是针对每个班级的。 该类可以访问所有实例的私有字段。 例如,该方法可以将o(如果适用)转换为相同类型,并将其私