例如,假设我们有三个实体:message
、author
和label
。一条消息可以有多个标签,但只能有一个作者。
所以消息基本上是:
@Entity
public class Message implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@ManyToMany
private Set<Label> labels = new HashSet<>();
@ManyToOne
private Author author;
...
}
链接是单向的。
Author a = new Author("auteur A");
a = authorRepository.save(a);
Message msg = new Message("un message", "texte du message", a);
msg = messageRepository.save(msg);
for (int i=0; i < 10; i++) {
Label lab = new Label("label"+i);
lab = labelRepository.save(lab);
labelRepository.flush();
msg.addLabel(lab);
}
messageRepository.save(msg);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("demo1PU");
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Author a = new Author("auteur A");
em.persist(a);
Message msg = new Message("un message", "texte du message", a);
em.persist(msg);
for (int i=0; i < 10; i++) {
Label lab = new Label("label"+i);
em.persist(lab);
msg.addLabel(lab);
}
transaction.commit();
em.close();
emf.close();
显然,Spring管理的实体与常规EntityManager操作的实体有点不同。但是有什么明确的文档吗?spring-data-jpa-reference.pdf
文件帮助不大。
好吧,只是为了避免人们很难弄清楚问题是什么:
事实上,违反规定的代码如下:
@Transactional
@PostConstruct
public void initDatabase() {
if (messageRepository.count() == 0) {
Auteur a = new Auteur("auteur A");
a = auteurRepository.save(a);
Message msg = new Message("un message", "texte du message", a);
msg = messageRepository.save(msg); // (pas nécessaire, vu qu'on le fait à la fin de la méthode...)
for (int i = 0; i < 10; i++) {
Label lab = new Label("label" + i);
lab = labelRepository.save(lab);
msg.addLabel(lab);
}
}
}
而且问题是,当调用@postconstruct
带注释的方法时,依赖注入已经做了,这很好,但是整个应用程序上下文还没有准备好,所以代码没有在一个事务中执行。
@Transactional
@EventListener(ContextRefreshedEvent.class)
public void initDatabase() {
...
}
托管 本页告诉你如何在自己的服务器上托管 .crx文件。如果你仅仅通过Chrome Web Store发布扩展,应用,或者主题那么你不需要本页。取而代之的是查阅Chrome Web Store帮助和开发者文档。 注意:如果你已经把扩展发布到扩展库,扩展就会合并到Chrome Web Store里。 按照惯例, 无论是Chrome Web Store还是特定服务器所提供的扩展, 可安装的web ap
托管bean它是一个纯Java类,它包含一组属性和一组,方法。 以下是托管bean方法执行的常见功能: 验证组件的数据 处理组件触发的事件 执行处理以确定应用程序必须导航的下一页 它也可以作为JFS框架的模型。 JSF托管Bean示例 请看看下面一段示例代码 - 您可以通过以下方式使用此。 通过配置成XML文件。 通过使用注释。 通过XML文件配置托管Bean 在xml文件配置是比较旧方法。 在这
Blade 中认为组件就是一种类型的 Bean 或者叫对象,框架内置了简单的 IOC 容器来帮你将他们托管起来。 这样用户在使用的时候就可以达到对象复用,不必无限的使用 new 关键词带来内存泄漏。那么我们在使用组件的 时候就要干2件事:1、创建一个组件 2、让 Blade 托管该组件 核心特征 常驻内存,我们的组件被框架托管后实际上以单例的方式存储在缓存池中,用的时候取出来就可以了。 组件类型
内容管理托管/API工具 API CMS 工具: prismic.io [free to $] contentful [$] Cosmic JS [free to $] Hosted CMS tools: LightCMS [$] Surreal CMS [$] Page Lime [$] Cushy CMS [free to $] Static CMS tools: webhook.com
本章聊一下: 如何把 gitbook 的书稿备份到 github.com。 如何用 gh-pages 服务,托管我们的笔记成为一个网站
我正计划将一个web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作: 在WEB-INF中添加空beans.xml文件。 将所有JSF@ManagedBean替换为CDI@Named Annotations。 用CDI或OmniFaces作用域注释替换所有JSF作用域注释。 将所有JSF@ManagedProperty替换为CDI@Inject Annotati