我的代码:
@MappedSuperclass
public abstract class Header {
public abstract List<Line> getLines();
}
@Entity
public class ChildHeader extends Header{
@OneToMany
public List<ChildLine> getLines();
}
@MappedSuperclass
public abstract class Line {
public abstract Header getHeader();
}
@Entity
public class ChildLine extends Line {
@ManyToOne
public ChildHeader getHeader();
}
问题:“ChildHeader”中的“error:”
getLines()
“与“Header”中的“
getLines()
”冲突;试图使用不兼容的返回类型”
尝试的解决方案:更改
列表
新错误:'
ChildHeader
'中的'getLines()
'与'Header
'中的'getLines()
'冲突;两种方法都具有相同的擦除功能,但都不会覆盖另一种
尝试的解决方案:尝试使用
Line[]
和ChildLine[]
代替列表
新错误:“列表/数组必须用
@OrderCol列
(或@IndexCol列
)注释”,但没有排序列。数组的顺序无关紧要,但似乎@OneTo众多
或JPA需要一个。
这是不可能的情况。我能做什么?
“这是不可能的情况…”
如果您遵循JLS关于覆盖实例方法的指导,则不会...
如果满足以下所有条件,则在类C中声明或由类C继承的实例方法m将重写在类A中声明的另一个方法m:
...
...
请特别注意有关方法签名的部分…
两个方法或构造函数,M
和N
,如果它们具有相同的名称,则具有相同的签名,相同的类型参数(如果有)(§8.4.4),并且,在将N
的形式参数类型适应M
的类型参数之后,相同的形式参数类型...
错误的症结在于您的方法不符合JLS的标准。
·…我能做什么?…“
如果重构了标题
类…
public abstract class Header {
public abstract < L extends Line > List< L > getLines( );
}
如果你重构了你的子标题类…
public class ChildHeader extends Header {
@Override
@SuppressWarnings("unchecked")
public < C extends Line > List< C > getLines(){ … }
}
然后你可以做我在这个工作示例中演示的…
…
Header header = new ChildHeader( );
List< ChildLine > lines = header.getLines( );
ChildHeader childHeader = lines.get( 0 ).getHeader( );
…
由于ChildHeader的“getLines”并没有重写Header的声明(鉴于它是一个抽象方法,最终将不得不这样做),因此无论出于何种目的,您都试图通过不同的返回类型来重载该方法。
在Java中,这是不允许的。
有什么原因不能像这样重写Header的“getLines”方法:
@Entity
public class ChildHeader extends Header{
@OneToMany
public List<Line> getLines();
// since this isn't an abstract class, there
// should be an implementation here
}
由于“ChildLine”扩展了“Line”,您仍然可以返回一个只有“ChildLine”的列表。您只需要确保在调用这样的方法时,Line列表中的那些“ChildLines”被转移到ChildLine列表中。
类似的逻辑适用于line类。ChildLine试图从第行重载“getHeader()”,而通过确保返回类型匹配,可以更容易地重写该方法。
问题内容: 您将如何在以下示例代码中配置注释?我只想保留JPA注释,避免使用Hibernate特定的依赖项。 下面的代码正确吗? (这些类将具有多个版本,RefSomeOtherExample等,并且每个类一个db表。有些可能会添加其他字段(列),但大多数只会使用继承自“ RefData”基类的基本字段。) 基类: 最终,我想使用Hibernate的SchemaExport类从中生成模式创建脚本。
继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?
我有一个抽象类,这个类是在她的子类中扩展的: < li >我在这个抽象类上实现了一个方法,并抽象了另一个方法 < li >实现的方法是每个子类对象都必须访问的通用方法。所以我决定在抽象类上实现它,避免在每个子类上实现相同的方法。 小例子: 我想听听你对这种实施方式的看法, 问候。
问题内容: 我的数据模型代表法人实体,例如企业或个人。两者都是纳税实体,都具有TaxID,电话号码和邮件地址的集合。 我有一个Java模型,其中有两个扩展抽象类的具体类。抽象类具有两个具体类共有的属性和集合。 我正在 MySQL* 数据库上使用 Hibernate JPA注释,其类如下: * 问题是,和对象需要参考他们的主人,这是一个。hibernate抱怨: 看来这将是一个相当普遍的Java继承
我有一个关于JPA中继承的问题,是否可以使用JOINED策略来实现这个层次结构? 这是我的代码: 在上面的层次结构之后,我尝试使用JPQL进行查询,这是查询: 此代码从主代码运行 当我运行该查询时,会抛出以下错误 导致原因:com . MySQL . JDBC . exceptions . JDBC 4 . MySQL syntaxerrorexception:未知列“employee1_。“字段
问题内容: 我可以以某种方式在抽象类上对一组注释进行分组,并且扩展该类的每个类都已自动分配了这些注释? 至少以下情况不起作用: 问题答案: 答案是不 除非注释类型具有@Inherited元注释,否则不会继承Java注释:https : //docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html。 Spring的注释