- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有小部件列表的单元格。 Widgets 是一个抽象实体,它用于存储所有 future 实体的公共(public)属性,如按钮、搜索、条件等。请不要考虑 ClassNamed 接口(interface) - 它对我的结果没有影响 - 我检查了两次。
单元格(带有小部件列表):
@Entity
@Table(name = "DASHBOARD_CELL")
public class DashboardCell {
private Integer id;
private Integer rowPosition;
private Integer columnPosition;
private Integer columnWeight;
private DashboardBox dashboardBox;
private List<DashboardWidget> dashboardWidgets;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "ROW_POSITION")
public Integer getRowPosition() {
return rowPosition;
}
public void setRowPosition(Integer rowPosition) {
this.rowPosition = rowPosition;
}
@Column(name = "COLUMN_POSITION")
public Integer getColumnPosition() {
return columnPosition;
}
public void setColumnPosition(Integer columnPosition) {
this.columnPosition = columnPosition;
}
@Column(name = "COLUMN_WEIGHT")
public Integer getColumnWeight() {
return columnWeight;
}
public void setColumnWeight(Integer columnWeight) {
this.columnWeight = columnWeight;
}
@ManyToOne(optional = false, fetch=FetchType.LAZY)
@JoinColumn(name="DASHBOARD_BOX_ID")
@JsonBackReference
public DashboardBox getDashboardBox() {
return dashboardBox;
}
public void setDashboardBox(DashboardBox dashboardBox) {
this.dashboardBox = dashboardBox;
}
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "dashboardCell", fetch=FetchType.EAGER)
@JsonManagedReference
public List<DashboardWidget> getDashboardWidgets() {
return dashboardWidgets;
}
public void setDashboardWidgets(List<DashboardWidget> dashboardWidgets) {
this.dashboardWidgets = dashboardWidgets;
}
}
小部件:
@Entity
@Table(name = "DASHBOARD_WIDGET")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class DashboardWidget implements ClassNamed{
private Integer id;
private String title;
private Integer backgroundColor;
private Integer orderNumber;
private DashboardCell dashboardCell;
private String widgetType = getWidgetType();
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "ID")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "TITLE")
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Column(name = "BACKGROUND_COLOR_VALUE")
public Integer getBackgroundColor() {
return backgroundColor;
}
public void setBackgroundColor(Integer backgroundColor) {
this.backgroundColor = backgroundColor;
}
@Column(name = "ORDER_NUMBER")
public Integer getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(Integer orderNumber) {
this.orderNumber = orderNumber;
}
@ManyToOne(optional = false)
@JoinColumn(name = "DASHBOARD_CELL_ID")
@JsonBackReference
public DashboardCell getDashboardCell() {
return dashboardCell;
}
public void setDashboardCell(DashboardCell dashboardCell) {
this.dashboardCell = dashboardCell;
}
public String getWidgetType() {
return getClassName();
}
public void setWidgetType(String widgetType) {
this.widgetType = widgetType;
}
}
CriteriaWidget:
@Entity
@Table(name = "DASHBOARD_CRITERIA")
public class DashboardCriteria extends DashboardWidget {
private Integer value;
private Integer maximumValue;
@Column(name = "ACTUAL_VALUE")
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
@Column(name = "MAX_VALUE")
public Integer getMaximumValue() {
return maximumValue;
}
public void setMaximumValue(Integer maximumValue) {
this.maximumValue = maximumValue;
}
@Transient
@Override
public String getClassName() {
return DashboardCriteria.class.getName();
}
}
当我尝试使用以下代码查询所有带有小部件的单元格时:
sessionFactory.getCurrentSession().createCriteria(DashboardCell.class).list();
我有 4 条记录:1 个单元格有 4 个标准,1 个(相同单元格)有 4 个标准,1 个(相同单元格)有 4 个标准,1 个(相同单元格)有 4 个标准。我在数据库中拥有的是 1 个带有 4 个 DashBoardCriteria 的单元格(H2 数据库):
insert into DASHBOARD_CELL (ID, ROW_POSITION, COLUMN_POSITION, COLUMN_WEIGHT, DASHBOARD_BOX_ID) values (100, 0, 0, 12, 6);
insert into DASHBOARD_CRITERIA (ID, TITLE, BACKGROUND_COLOR_VALUE, ORDER_NUMBER, DASHBOARD_CELL_ID, ACTUAL_VALUE, MAX_VALUE) values (200, 'Registered', 16769408, 0, 100, 21, 30);
insert into DASHBOARD_CRITERIA (ID, TITLE, BACKGROUND_COLOR_VALUE, ORDER_NUMBER, DASHBOARD_CELL_ID, ACTUAL_VALUE, MAX_VALUE) values (201, 'Completed', 11723766, 1, 100, 22, 30);
insert into DASHBOARD_CRITERIA (ID, TITLE, BACKGROUND_COLOR_VALUE, ORDER_NUMBER, DASHBOARD_CELL_ID, ACTUAL_VALUE, MAX_VALUE) values (202, 'Approved', 11921353, 2, 100, 5, 30);
insert into DASHBOARD_CRITERIA (ID, TITLE, BACKGROUND_COLOR_VALUE, ORDER_NUMBER, DASHBOARD_CELL_ID, ACTUAL_VALUE, MAX_VALUE) values (203, 'Cancelled', 16755884, 3, 100, 17, 30);
我假设此查询给出了(单元格数 * 小部件数)。我的问题是为什么?我认为 hibernate 应该自动加入 child ,不是吗?我做错了什么或者可能是什么原因?
HQL 查询:
SELECT this_.ID AS ID1_1_1_,
this_.COLUMN_POSITION AS COLUMN_P2_1_1_,
this_.COLUMN_WEIGHT AS COLUMN_W3_1_1_,
this_.DASHBOARD_BOX_ID AS DASHBOAR5_1_1_,
this_.ROW_POSITION AS ROW_POSI4_1_1_,
dashboardw2_.DASHBOARD_CELL_ID AS DASHBOAR6_3_3_,
dashboardw2_.ID AS ID1_3_3_,
dashboardw2_.ID AS ID1_3_0_,
dashboardw2_.BACKGROUND_COLOR_VALUE AS BACKGROU2_3_0_,
dashboardw2_.DASHBOARD_CELL_ID AS DASHBOAR6_3_0_,
dashboardw2_.ORDER_NUMBER AS ORDER_NU3_3_0_,
dashboardw2_.TITLE AS TITLE4_3_0_,
dashboardw2_.widgetType AS widgetTy5_3_0_,
dashboardw2_.MAX_VALUE AS MAX_VALU1_2_0_,
dashboardw2_.ACTUAL_VALUE AS ACTUAL_V2_2_0_,
dashboardw2_.clazz_ AS clazz_0_
FROM DASHBOARD_CELL this_
LEFT OUTER JOIN
(SELECT ID,
BACKGROUND_COLOR_VALUE,
ORDER_NUMBER,
TITLE,
widgetType,
DASHBOARD_CELL_ID,
MAX_VALUE,
ACTUAL_VALUE,
1 AS clazz_
FROM DASHBOARD_CRITERIA) dashboardw2_ ON this_.ID=dashboardw2_.DASHBOARD_CELL_ID
WHERE this_.DASHBOARD_BOX_ID=?
我从 H2 转移到 postgresql。我执行了查询,结果似乎是正确的——我收到了 4 个链接到一个单元格的小部件。这可能是 hibernate 5 中的一个错误,我有多个相同的对象 4 次?
最佳答案
它按设计工作。就像在 HQL/JPQL 中,您需要使用 distinct
,在 Criteria 中,您需要
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
关于java - 具有 hibernate 标准的 hibernate 继承(TABLE_PER_CLASS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634474/
在我的应用程序中,我有一个这样的映射 @MappedSuperclass public abstract class Base implements Serializable { @Entity @T
我有两个表:UserExtended 继承自User。但我无法将现有的 User 提升为 UserExtended。 实体: @Entity @Table @Inheritance(strategy
我使用 Hibernate 来持久化继承的对象,但是当我尝试在数据库中持久化对象时收到此消息: org.springframework.dao.InvalidDataAccessResourceUsa
我在 hibernate 方面遇到了一个非常大的问题。 我的继承策略在 eclipselink 作为 jpa 提供程序下完美运行,无论是在 glassfish 还是 jboss 应用程序服务器下,但是
我在 hibernate 中定义了一个树结构。我有一个名为 TreeObject 的抽象元素。一个树对象可以有多个子对象,而只有一个父对象。 我也有这个类的一些实现:表单、类别、问题组和问题。它们都继
这个问题与 this thread 中提到的问题有关。 . 在 MySQL 上使用 JPA 时,我也面临同样的问题。只有当我将生成策略更改为 TABLE 时才能解决它。 但问题是,这个问题背后的原因是
com.something.SuperClass: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public ab
在 TABLE_PER_CLASS 映射中, 子实体id在所有类型的子实体实例中是否需要唯一 例如: 员工:1,2,3,4,5,6 销售额:1,3,5 开发人员:2,4,6 或者在表中可以是唯一的:
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 在父类中允许将子实体视为具有与父类相同的信息以及一些属性的表。阅读时这对我来说很好( ht
亲爱的 future 读者:在完成 Sannes answer 之后和他提供的链接,我决定改用序列。较新的 Hibernates 会注意它也适用于 MySQL。 我有一个 abstract 类,其中包
想象一下以下场景,我们使用继承策略 TABLE_PER_CLASS 和 Template 作为父类(super class),而 Product 作为子类。 模板: @Entity @Inherita
我创建了以下场景: @javax.persistence.Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public
我有一个问题,我有一个带有继承 TABLE_PER_CLASS 的基本抽象实体站和三个子表 StationCompany StationAnalysis StationVariant @MappedS
我有一个带有小部件列表的单元格。 Widgets 是一个抽象实体,它用于存储所有 future 实体的公共(public)属性,如按钮、搜索、条件等。请不要考虑 ClassNamed 接口(inter
我正在使用 Hibernate JPA。 假设我有这些类: AbstractPerson |--> ConcreteEmployee |--> ConcreteCustomer 有没有办法让具体的类有
我正在尝试创建一系列对象,这些对象都存储在单独的表中,但是所有这些表上都有一组共同的字段。我希望 Hibernate 对所有这些表进行联合,但不包括父类(super class)作为表。 当我只注释父
我正在尝试在 Hibernate 中实现一个非常简单的继承模型。基本上我有一个可以称为 A 的父类(super class),以及几个继承自 A 的子类。由于我看到的行为对所有这些行为都是相同的,因此
我正在使用 Hibernate 来保存所有实体都是从基本抽象实体继承的实体。对于所有具体实体,分别有数据库表,带有自动增量主键列。但是使用 GenerationType 作为“AUTO”或“IDENT
我尝试有 2 个表,如下所示: MISExercise(表) 身份证名称... 2个 MISInteractiveExercise(表) 身份证名称... 1个 它们必须没有相同的 ID。他们是从同一
我们有 2 个表(一个 Activity 表和一个存档表),它们具有相同的结构(例如 Employee 和 EmployeeArchive )。为了能够利用通用代码为两个表使用结果,我们有一个抽象父类
我是一名优秀的程序员,十分优秀!