我要做的是让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);
}
}