如何使用带有连接或查询的hibernate创建Map(标题不足以解释它)

时间:2013-06-11 16:49:13

标签: java hibernate jpa

我要做的是让Hibernate根据Join或select(无论哪种方法)为我生成Map。那部分是静态知道的,因此我不应该去DB进行单独的选择。

从那个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)
)
在类型

'加入'

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的表我认为与讨论无关。

现在代码我 LIKE 工作:

@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);

    }
}

0 个答案:

没有答案