问题标签 [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.
nhibernate - 为什么我的鉴别器作为代理返回?
我的Status
一个 POCO 中有一个属性,它充当鉴别器(与使用 非常相似enum
)。
这是具有该Status
列的 HBM 的一部分。
这是我的Status
餐桌 HBM。
最后,这是我的QueryOver
.
此查询运行没有错误,但是该Status
属性未正确初始化。当我使用该Status
值时,我收到此异常。
查看 NHibernate Profiler 我可以看到它实际上选择了正确的Status_id
.
我的 HBM 或查询有什么问题?
请注意,我能够成功查询所有状态并接收所有状态鉴别器对象的列表。我还可以看到生成的代理对象包含对象的正确值,Status
因此 NHibernate 正确地返回了正确的值。
java - Hibernate - 我应该使用鉴别器吗?
我正在采用每个子类的表方法来使用休眠映射一些数据。通常在数据库层,我会在抽象表及其子表中引入一个类型列,这将强制抽象记录只能与匹配类型的子记录相关。然而,从各种资源来看,似乎表明休眠鉴别器用于遗留数据库。这是否意味着我采取了错误的方法?
java - Hibernate继承映射中来自单独表的鉴别器值
我有两张桌子,price_feed
和price_feed_type
。价格馈送将包含价格馈送的不同实现的数据。
现在,这通常是通过<discriminator>
标签完成的,price_feed
表中有一个鉴别器字段。但是,在系统的上下文中,最好在price_feed_type
表中包含此字段。我遇到了这种<discriminator formula="..."/>
方法,并尝试使用它。
一种解决方案如下(假设这是在formula
属性中输入的):
另一个解决方案如下,我应该注意我已经尝试priceFeedID
过price_feed.price_feed_type_id
任何一个都会出现以下错误:
一个额外的注释,没有括号,我得到了错误:
关于如何解决这个问题的任何想法?
编辑:
添加到目前为止我发现的内容:
使用任何一个,如果我这样做SELECT *
,然后在SELECT implementing_class
外面做,它会给出一个不同的错误。完整代码:
错误是:
hibernate - JPA OneToMany 与使用 DiscriminatorOptions 和 orphanremoval 的继承实体
我有一个问题,我现在几天都解决不了。我阅读了许多文档,搜索了许多论坛,但没有找到解决方案。我继承了类,如下代码所示:
我想在 OneToMany realions 的多方面使用这些特定实体:
当我坚持这个时事通讯实体时,所有记录都会很好地创建。如果我修改列表的内容,似乎 orphanRemoval = true 属性无效,因为旧记录保留在表中,并创建了新记录。如果我从基本实体中删除 @DiscriminatorOptions 注释,旧记录将被删除,但继承鉴别器不再起作用,因此 JPA 提供程序(休眠)尝试将每个子记录加载到每个集合中,这会导致 org .hibernate.loader.Loader.instanceAlreadyLoaded 异常。
有没有人成功地实现了这样的模型,或者知道这个问题的任何解决方法?
java - Hibernate 4:持久化 InheritanceType.JOINED 鉴别器列值
我有一个简单的 JOINED 文档层次结构:
如您所见,所有子表所做的都是共享 Documents 表中的相同 ID。除此之外,SystemDocuments
添加一binary_data
列并且ExternalDocuments
不添加任何新属性。(另请注意,层次结构中还有另外两个具体的子表,由'official'
和表示,'individual'
在此不相关。)
以下是上表的映射:
文档.java:
系统文档.java:
外部文档.java:
后一个类应该映射到 Documents 的鉴别器列 value 'external'
。通过 EntityManager.find 查找实体时,鉴别器被正确返回,实际上是因为我的测试数据的鉴别器已正确插入到数据库中。
现在我使用以下代码通过 JPA 和文件上传器将新文档/文件插入系统:
但是,在检查数据库时,我可以看到 Hibernate没有将'external'
鉴别器值插入到Documents
表的discriminator
列中。
过去有过这方面的问题,请参阅https://hibernate.onjira.com/browse/ANN-140和最近的 Hibernate 4 https://hibernate.onjira.com/browse/HHH-4358,所以机会它应该这样工作吗?
然后我在当前的 Hibernate 4 API Docs 中找到了http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/annotations/DiscriminatorOptions.html,但它不起作用(参见@DiscriminatorOptions 在文档类)。
如何让 Hibernate 4使用原始注释插入鉴别器?
注意:我不想将鉴别器列映射为常规列。
vb.net - Entity Framework 4.2 table per hierarchy group by discriminator
I am working on a project using an EF 4.2 code first model. This model contains a TPH inheritance structure for products. I need to group the polymorphic results of this inheritance model on the discriminator and am running into some issues.
The entity framework does not expose the discriminator to complete this grouping. My first question is can I get direct access to this discriminator? My reading and experience is telling me no, so I came up with this solution that sort of works. It is not performing well and I am not happy with how it will need to be maintained.
My classes look something like this (simplified):
I built an extension method that takes a product and returns it's basetype name as a string.
With that, I built this structure to group the results of product by type so I can run through them:
I can now loop through the list to get the behavior I want, but the performance is not ideal and I am concerned it will be unacceptable as the number of products grows.
Also, this can give me easy access to shared properties (Name) but now I don't have many options to cast these into their real type, maybe a select case around TypeName. . .
Any recommendations are appreciated, also please forgive any code errors above, I retyped the examples from memory as I don't have access to the project at the moment.
java - 具有鉴别器列的对象的 Eclipselink 延迟加载问题
我们的应用程序中有以下层次结构:
在其他对象中,我试图加载这样的实体:
有一个预编译查询来加载所有层次结构,这些层次结构加载一些其他父对象。还有一个查询提示——eclipselink.left-join-fetch=PP.VCBE.validationMeasures(如果改为eclipselink.left-join-fetch=PP.VCBE.minimalDemands,则加载最小需求,但验证措施(具有鉴别器 1 的条目)也被加载到最小需求集合中 - 但不应加载那些)。
现在,执行查询时,validationMeasures 集合是否填充了对象,但所有这些对象实际上都是最低要求,并且在数据库中具有 2 作为鉴别器值。
执行的查询如下:
正如我所见,查询中没有 DISCRIMINATOR 约束,为什么?
对这种行为有任何想法吗?以及如何根据鉴别器值告诉 eclipselink 加载集合?
c# - 如何在将鉴别器 (__Disc__) 字段用作条件时更改它
我必须更新和更改表的 Discriminator( _ Disc _ ) 字段,而映射的实体没有它作为实体成员。任何解决方案?
hibernate - 将鉴别器列公开为 hbm 文件中的属性
我们的系统中有一个存储资源键/值对的表。有两列存储值;一个 VARCHAR 列用于较小的值,一个 CLOB 用于较大的值。在 Java 端,它们被实例化为两个类之一,一个 StandardResourceBundleValue 或一个 LargeResourceBundleValue,并且在一个表中使用一个鉴别器列来区分它们:
这是有趣的部分:如果键的值开始时很小(并作为 StandardResourceBundleValue 持久化)然后值变为大于 VARCHAR,我们需要一种将其转换为 StandardResourceBundleValue 的方法。发生这种情况的代码不能只删除 StandardResourceBundleValue 并创建 LargeResourceBundleValue,因为这会导致违反约束。
我们想做的是为那个鉴别器列定义一个属性,所以基类可以有一个方法来改变对象中的值,所以当它再次持久化时,它会将值保存在 CLOB 中。
当我尝试构建表时,出现以下错误:
实体映射中的重复列:com.foo.resourcebundle.LargeResourceBundleValue 列:RESOURCE_TYPE(应使用 insert="false" update="false" 进行映射)
显然它不明白我想要做什么,但应该有一种方法是有道理的。那么如何将鉴别器字段公开为属性?
谢谢。
entity-framework - 代码优先:判别器查询。我知道,我不应该需要
我创建了 TPH 代码优先 tmodel 并在所需的鉴别器列上添加了 NotMappedAttribute。我可以将 DbSets 添加到子类的上下文中,并通过这些类型的集合进行查询,代码优先仍然是我的朋友。
但是,假设我有一个实体,它本身包含 BaseType 的集合,其中一些可能是一种类型,而另一些可能是另一种。如何编写查询以获取键入的记录?顺便说一下,我不想在延迟加载的内存集合上这样做。
假设有一个名为 Association 的类和一些子类 AssocA 和 AssocB,它们都映射到 Associations 表并在 AssocationTypeId 上进行区分。现在假设您有一个实体 - 为了参数,将其称为 Employee。所以例如
现在我想查询数据库以查找 AssocA = 的员工?我不希望任何关联都等于?但特定类型的关联。我不能使用 GetType,因为 LinqToEntities 不能使用它。我不能使用 AttributeTypeId 因为它在代码优先映射中使用。
我错过了什么?我的做法是合理的。但我无法建模。