问题标签 [discriminator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 删除 Mongoose 鉴别器中的 Schema 字段
我有一个带有两个鉴别器的 BaseSchema,它们向 BaseSchema 添加字段和方法。
现在我想添加第三个鉴别器,从 BaseSchema 中删除一些字段?那可能吗?
否则我应该定义一个 LightSchema,为我的 BaseSchema 创建一个鉴别器,然后附加另外两个鉴别器,这是最好的方法吗?
提前致谢
entity-framework - Doctrine2 DiscriminatorMap 可以是可选的/自动的以适应子类+命名空间吗?
我有一个具有“已加入”继承类型的抽象实体模型类。
如果我想在另一个包中扩展该实体,我需要将“子类”添加到鉴别器映射中。但如果它在另一个包中,这意味着我每次都需要修改父包实体将该模型扩展到另一个捆绑包中,我认为这确实有点道理。
因此,如果我不想每次在新包中使用新实体扩展抽象类鉴别器映射时都不需要修改它,是否可以说 Doctrine 或 SF2 “discr”字段必须等于子实体类名称+ 它的命名空间,所以这样它会更加动态,所以我不必每次想要扩展它时都编辑我的父包。
映射超类不是一个好的选择,因为我需要一对多的关系。
所以我的问题很清楚:如何避免手动设置“DiscriminatorMap”,以便将该字段自动设置为子类名+命名空间?(discr = 继承的类名 + 命名空间)
这是一个很酷的例子:
非常感谢你们所有人,祝你们有美好的一天!
mapping - MyBatis - 结果中缺少一些记录
我有一个结果图,例如:
我有一个查询,它返回4行:
但结果列表只有3 个项目。
经过一些调试后,我意识到它发生(可能)是因为 4 行中有 2 行的所有数据都相同,但尾值除外:
(方法 org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForNestedResultMap(ResultSetWrapper, ResultMap, ResultHandler, RowBounds, ResultMapping))
private void handleRowValuesForNestedResultMap(ResultSetWrapper rsw, ResultMap resultMap, ResultHandler resultHandler, RowBounds rowBounds, ResultMapping parentMapping) throws SQLException {
final DefaultResultContext resultContext = new DefaultResultContext();
skipRows(rsw.getResultSet(), rowBounds);
Object rowValue = null;
while (shouldProcessMoreRows(resultContext, rowBounds) && rsw.getResultSet().next()) {
final ResultMap discriminatedResultMap = resolveDiscriminatedResultMap(rsw.getResultSet(), resultMap, null);
final CacheKey rowKey = createRowKey(discriminatedResultMap, rsw, null);
Object partialObject = nestedResultObjects.get(rowKey);
// issue #577 && #542
if (mappedStatement.isResultOrdered()) {
if (partialObject == null && rowValue != null) {
nestedResultObjects.clear();
storeObject(resultHandler, resultContext, rowValue, parentMapping, rsw.getResultSet());
}
rowValue = getRowValue(rsw, discriminatedResultMap, rowKey, rowKey, null, partialObject);
} else {
rowValue = getRowValue(rsw, discriminatedResultMap, rowKey, rowKey, null, partialObject);
if (partialObject == null) {
storeObject(resultHandler, resultContext, rowValue, parentMapping, rsw.getResultSet());
}
}
}
if (rowValue != null && mappedStatement.isResultOrdered() && shouldProcessMoreRows(resultContext, rowBounds)) {
storeObject(resultHandler, resultContext, rowValue, parentMapping, rsw.getResultSet());
}
}
注意上面的粗体文本:对于第二次迭代,创建了正确的rowValue,但它没有添加到结果中,因为partialObject不为空。
任何帮助,将不胜感激。
hibernate - Hibernate 鉴别器列中的未知值
当 Hibernate 面对在鉴别器列中具有未知值的数据库记录时(例如,如果它们以某种方式被修改),它会如何表现?
例如我有:
但是一些代表此类对象的记录已将鉴别器列修改为值“其他”。在这种情况下,休眠将如何表现?
java - 为嵌入式 @ElementCollection 表添加鉴别器
有没有办法为嵌入式集合添加鉴别器?这是我所拥有的
目前,这两个字段的 EncounterData 实例都具有来自 meet_data_info 表的所有值,而不取决于类型。所以看起来鉴别器值不起作用?为什么以及如何使它工作?
hibernate - 使用 Hibernate 过滤掉未知的鉴别器,以实现向后兼容性
我有一个Hibernate应用程序,使用鉴别器策略将类层次结构映射到单个表。在v1.0中,它看起来像这样:
- 抽象类型
- SubType1 (v1.0) discr= subtype1
然后,我加载了我的应用程序的新版本v2.0,它处理一个新的子类型SubType2,并带有一个新的鉴别器:
- 抽象类型
- SubType1 (v1.0) discr= subtype1
- SubType2 (v2.0) discr= subtype2
在写入一些新数据后,我希望仍然能够将我的代码回退到 v1.0,以防出现问题。
为此,我需要v1.0来过滤掉/忽略带有鉴别器subtype2的表行。
如何以通用方式实现这一点,无论是使用JPA API还是Hibernate实现?我可以使用自定义方言“挂钩”到 Hibernate 内部吗?
php - 将子类映射为其扩展父类
我创建了以下抽象类,它使用单表继承并在DiscriminatorColumn 上映射子类model
。
假设我AbstractEntity
通过一些类扩展了抽象类:
并通过更多的子类扩展它们
现在,例如,当我实例化GreenEntityChildOne
它并将其持久化到数据库时,它会抛出一个异常,我没有它的映射。
我想要做的是GreenEntityChildOne
被映射为GreenEntity
(或者更确切地说,每个扩展下面的类的类都AbstractEntity
被映射为扩展上抽象类的类)。
这是可能吗?
.net - 数组的MongoDB自定义鉴别器
我正在使用 MongoDB(.NET 驱动程序 1.10)来存储具有弱类型字段的 C# 类:
默认情况下,如果 Value 包含一个数组,则该类被序列化为具有很长鉴别符的文档:
但我只想使用“SpecialValueClass[]”鉴别器字符串(或更短)。
我尝试像这样配置映射:
这对数组类型、泛型列表没有影响(但适用于解决方案定义的类型)。
如何告诉 mongodb 驱动程序为我的数组类型使用自定义鉴别器?我更喜欢不使用包装类,也不使用序列化属性。或者为什么驱动程序忽略了我的配置?
java - Hibernate 在关系中创建错误的实体子类型
我有一个奇怪的问题,即休眠不会在多对一关系中创建预期的实体类型。我们有以下具有子类层次结构的实体(简化):
在persistence.xml
这两个实体中都按顺序声明
现在我在数据库中创建 A1 和 B1 的实例:
我可以看到实例正确保存到数据库中,每个实例的 ID 为 1,鉴别器也是 1,B 中的 A_ID 也是 1。
当我现在尝试获取 B 时(在另一个休眠会话中):
我得到了例外:
通过调试,我发现 hibernate 正在创建 B1 类型的正确实体,并为与 A 的关系创建了 A2 类型的不正确实体。如果persistence.xml
更改了中的顺序,则会创建正确的 A1 类型。在这种情况下,hibernate 似乎没有考虑 A 表的 DISCRIMINATOR 列,但总是创建配置中声明的第一个子类型。如何解决这个问题?注释有问题吗?
(起初我在超类型 B 中也有方法的具体实现getA()
及其注释,但这会导致类似的问题。)