Может ли атрибут Entity отображаться другими атрибутами из того же объекта? - PullRequest
1 голос
/ 16 марта 2012

У меня есть структура сущностей, которая выглядит следующим образом:

@Entity
public class Event {
     @Id
     private Long id;
     @ManyToOne
     private Device device;
     @Column
     private Severity severity;

     ... getters/setters/other attrs ...
}

@Entity
public class Device {
     @Column
     private Impact impact;
     @ManyToOne
     private PriorityMatrix priorityMatrix;
     ... getters/setters/other attrs ...
}

@Entity
public class Priority {
     @EmbeddedId
     private PriorityId id;
     @Column
     private Long value;    
     ... getters/setters ...
}

@Embeddable
public class PriorityId {
     @Column
     private Severity severity;
     @Column
     private Impact impact;
     @ManyToOne
     private PriorityMatrix matrix;
     ... getters/setters ...
}

Воздействие и Серьезность - это перечисления с фиксированными значениями.

Могу ли я добавить «временный» атрибут «Приоритет» к объекту «Событие», который отображается с помощью матрицы воздействия и приоритета устройств и серьезности события? Если да, то как?

в SQL это были бы некоторые соединения, что-то вроде

SELECT priority_matrix.priority_value, 
      -- event attributes
      -- device attributes
    FROM event
    INNER JOIN device ON { -- event x device join }
    INNER JOIN priority_matrix ON {
         device.priority_matrix_id = priority_matrix.id
         AND device.impact = priority_matrix.impact
         AND event.severity = priority_matrix.severity
    }

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

Ответы [ 2 ]

0 голосов
/ 11 декабря 2012

Решением было сохранить приоритет непосредственно в Event для проблем с производительностью. Затем, когда влияние устройства изменяется, приоритет события изменяется соответственно.

0 голосов
/ 16 марта 2012

вы можете иметь временный объект, но он не будет действовать в вашей базе данных, например в сгенерированном sql.

//Event class:
@Transient
private Priority priority;


//setter
public void setPriority(Priority p){
    //if you need to change/update the persistent object when setting a Priority, 
//you could set the mapped fields in this setter
    this.device.setImpact(p.getId().getImpact());
    this.setServerity(p.getId().getSeverity());
}

//getter 
public Priority getPriority(){
//since annotated by Transient annotation,this will NOT return persistent object. 
// but you could get the transient Priority object and then load it in future
    Priority p = new Priority();
    //create a PriorityId object
    priorityId.set(..this.device..this.severity..)
    p.setPriorityId(priorityId);
    p.setValue(...);
    ...
    return p; //transient object!
}

вышеуказанные коды не написаны в IDE, могут иметь опечатку, но это показывает идею.

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