我有一个项目,其中一部分数据结构是用@ Inheritance(strategy = Inheritance type)制作的。已加入)。数据结构的这一部分看起来像这样:
该设计基于本文的思想。我使用Hibernate和JPA2接口作为我的数据层。上面的结构产生了下面的pojo/dao类(省略了getter和setter):
基本项:
@Entity
@Table( name = "base_item" )
@Inheritance(strategy = InheritanceType.JOINED)
public class BaseItemPojo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
}
物理项目:
@Entity
@Table( name = "physical_item" )
public class PhysicalItemPojo extends BaseItemPojo{
}
一些硬件:
@Entity
@Table( name = "some_hardware" )
public class SomeHardwarePojo extends PhysicalItemPojo{
}
其他硬件:
@Entity
@Table( name = "some_other_hardware" )
public class SomeOtherHardwarePojo extends PhysicalItemPojo{
}
这是我的问题:
我的另一个表引用了base_item类,如果该类根据该base_item_id加载“some_hardware”或“some_other_hardware”,这将使我的生活变得轻松得多。因此,我在那个特定的类上创建了这样的导航属性:
@Entity
@Table( name = "some_navigation_class" )
public class SomeNavigationClassPojo{
@ManyToOne(optional = false)
@JoinColumn(name="base_item_id", insertable = false, updatable = false)
private BaseItemPojo baseItem;
@ManyToOne
@JoinColumn(name="base_item_id", insertable = false, updatable = false)
private PhysicalItemPojo physicalItem;
@ManyToOne()
@JoinColumn(name = "base_item_id", insertable = false, updatable = false)
private SomeHardwarePojo someHardwarePojo;
@ManyToOne()
@JoinColumn(name = "base_item_id", insertable = false, updatable = false)
private SomeOtherHardwarePojo someOtherHardwarePojo;
}
正如您可能已经猜到的那样,上述方法不起作用。如果我尝试访问附加到实体的相关“SomeHardwarePojo”的“SomeNavigationClassPojo”,则会收到以下错误:
java.lang.IllegalArgumentException:无法设置SomeOtherHardwarePojo字段SomeNavigationClass。someOtherHardware到SomeHardwarePojo。
作为参考,我的目标是,如果数据库中不存在someHardwarePojo或someOtherHardwarePojo,则应将它们设置为null,而不是尝试映射到PhysicalItemPojo的相应其他子项。
可以将属性添加为简单的getter:
public class SomeNavigationClassPojo {
...
public SomeHardwarePojo getSomeHardwarePojo() {
return baseItem instanceof SomeHardwarePojo ? (SomeHardwarePojo) baseItem : null;
}
...
}
主要缺点:您不能在 JPA 查询中使用属性 - 例如,像 SELECT n FROM SomeNavigationClassPojo n JOIN n.somehardwarepojo s WHERE s.propertyOfHardwarePojo = 'x'
是不可能的。
对不起,我的英语不是我的母语,而且已经两点钟了,所以现在不能思考了。现在,在将hibernate与Java和PostgreSQL一起使用时,我遇到了下一个问题:我有如下实体Human和User(带有注释映射): 和数据库结构如下: 当我尝试运行我的项目(简单单元测试)时,我得到下一个错误: (我剪掉了日志的尾部,而它在JUnit方法中响应invokin)。 生成的查询(失败): 可以看到,它试图在
问题内容: 我正在使用Hibernate JPA。我下面有Oracle存储过程。 如何调用此存储过程? 问题答案: 检查这个SO问题: 首先,您定义名为本地查询的存储过程: 然后使用以下命令执行它:
问题内容: 我正在练习 自我连接 ,这是我编写查询时不了解的事情。 我有桌子 雇员表包含三个记录。 最后一列manager_id是指使Ahmed和Tove成为Ola经理的第一列ID。 如果我这样写查询 结果使艾哈迈德和托夫经理。然而 正确无误,有人可以解释吗? 问题答案: 自联接就像内部联接,其中同一表的两个或更多实例通过公共数据类型的列/字段联接在一起。这种连接(内部连接)根据连接条件给出公共行
我在联合mod-RDB AOF中工作<我正在寻找一种从RDB文件重新启动后加载的方法-主要用于快速重启<除此之外,我想继续编写AOF<一旦我知道发生了灾难,我会手动从AOF加载<这是我当前的配置:(我知道appendonly yes是说AOF将在重启后加载,我正在从RDB中寻找等待加载并继续写入AOF。) 谢谢
问题内容: 我正在用Java 构建一个类。逻辑本身可以工作并找到期望的解决方案(带有任意数量的参数)。无论如何,部分项目如我所料。 问题来自解决方案表示的问题。可以公平地说,我已经用Python完成了这个项目,并决定尝试使用Java作为一种介绍,这可能是问题所在,我也想像Python一样这样做。 这是我的一些课程: 问题是它仍然从Operation类获取令牌:“ null” 我知道这可能是因为op
你可以给你的任务加入一段描述性的文字. 它将会在任务执行的时候显示出来. 例子 15.18. 给任务加入描述 build.gradle task copy(type: Copy) { description 'Copies the resource directory to the target directory.' from 'resources' into 'target'