2012-03-16 3 views
1

私はこのようになりますエンティティの構造を持っている:Can Entity属性は、同じエンティティの他の属性によってマップできますか?

@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 
    } 

のようなものに参加するだろう私はイベントをロードする瞬間に優先度の値をロードします。

答えて

0

解決策は、パフォーマンスの問題のためにイベントで優先順位を直接保存することでした。次に、デバイスの影響が変更されると、イベントの優先順位がそれに応じて変更されます。

0

一時オブジェクトを持つことはできますが、データベースには反映されません。生成されたSQLで。

上記のコードはIDEで書かれていないため、誤字があるかもしれませんが、そのアイデアを示しています。

+0

ええ、既にそのようなものが使用されていますが、文字通りデータベースに何千ものイベントがあります。そのようなものを使用することのパフォーマンスは本当に悪いです:/ –

関連する問題