Как обновить унаследованную сущность, когда конкретный дискриминатор должен измениться? - PullRequest
1 голос
/ 03 февраля 2012

Я постараюсь быть ясным, как мой плохой английский, позвольте мне ...

У меня есть дерево, определенное в базе данных с использованием узлов, эти узлы могут быть суммами, умножениями и любой математической операциейсущность базового узла определяется следующим образом (это просто математическая операция, представленная в виде дерева в нотации posfix)

@Entity
@Table(name = "Nodo")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo", discriminatorType = DiscriminatorType.STRING)

public abstract class Nodo implements java.io.Serializable, NumberExpressible {

, а также у меня есть много классов, определяющих тип узлов, отображаемых следующим образом ...

@Entity
@DiscriminatorValue("SUM")
public class SumNode extends Nodo {

Я должен использовать эти дочерние классы, потому что у каждого из них есть своя логика для выполнения соответствующих операций ...

Теперь проблема в том, что когда мне нужно обновить дерево, яУ меня много исключений, чтобы быть более конкретным, это пример того, что происходит (), например, у нас есть простое дерево, подобное этому (4 + 8)

Но тогда мне нужно изменить его на: ((3 * 2) + 8)

Если вы видите, что первый узел второго уровня в первом случае является constantNode, а во втором случае - MultNode ... поэтому, когда я получаю объект из entityManagerя получаю постоянный узел, бно тогда, когда мне нужно изменить тип, он просто не изменится ... Последнее, что я пробовал, это отсоединить исходную сущность и объединить «новую» (на самом деле не нова ... она все та жеинформация, но другой экземпляр класса ..)

Есть идеи ???Я застрял около недели ... пожалуйста, помогите мне просто нужно быть способным обновлять узлы, на самом деле просто дискриминатор ... и не хочу делать прямое обновление, потому что я нахожусь в большем контексте trasac иЯ не уверен, что это могло бы повлиять на что-то еще

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...