1

我想要做的是让 Hibernate 根据 Join 或 select 为我生成一个 Map (无论哪个有效)。该部分是静态已知的,因此我不必去数据库进行单独的选择。

然后,我想从该 Map 中使用运行时键来获取最终值。请参阅下面的表格和代码

商业案例:我们希望能够为系统中的各种警报生成不同的内容:媒介(电子邮件/短信)、事件(发生了什么)以及最终的用户输入。将图形图表发送到 SMS 目的地是没有意义的,但对于发送相同事件的电子邮件(例如)来说会很棒。我们可以利用现有代码来应用 XSLT 样式表,而这正是我们最终所追求的。

围绕这一点的注释令人困惑,我承认可能对这个问题的想法完全错误。我正在寻找一些教育和解决方案。

CREATE TABLE AlertProfile(
  AlertProfileID BIGINT(20) NOT NULL AUTO_INCREMENT ,
  Description VARCHAR(64) NOT NULL,
  `Type` enum('EMAIL','SMS','COMPOSITE') NOT NULL,
  Destination VARCHAR(32),
  PRIMARY KEY (AlertProfileID)
)

'JOIN' 类型

CREATE TABLE EventTemplates(
  EventTemplateID BIGINT(20) NOT NULL AUTO_INCREMENT,
  EventName VARCHAR(32) NOT NULL,
  `Type` VARCHAR(32) NOT NULL,
  TemplateXSLT MEDIUMTEXT NOT NULL,
  PRIMARY KEY (EventTemplateID)
)

有一些缺失的带有 AlertProfiles 的表格,我认为这些表格与讨论无关。

现在我想工作的代码

@Entity
@DiscriminatorValue("EMAIL")
public class EmailAlertProfile extends AlertProfile<String>  {


    @Basic
    @Column(name = "Destination")
    private String emailAddress;

    @OneToMany(cascade = CascadeType.ALL)
    @MapKey(name = "Type")
    private Map<String, EventTemplate> nameToTemplate = new HashMap<>();

    @Override
    public Type getType() {
        return Type.EMAIL;
    }

    @Override
    public void sendAlert(EventMessage event) {
        // code here to work. Use the event type to select from 
        // all available email templates
        String template = eventTemplates.get(event.getEventType());
        String content = event.applyStyleSheet(new Source(template))
        VWMessage vw = new VWMessage("no-reply@company.com",emailAddress,event.getSubject(),);
        event.setRecipient(emailAddress);
        JmsTemplate jmsTemplate = StaticContext.getBean(JmsTemplate.class);
        Queue queue = (Queue) StaticContext.getBean("emailQueue");
        jmsTemplate.convertAndSend(queue, event);

    }
}
4

0 回答 0