在部署中保留一个实体

Persisting an entity on deployment

我目前正在开发一个用于创建和 运行 模拟的 Web 应用程序。对于这个应用程序,我希望用户能够加载一些预设并使用它们。为此,我希望在部署时将预设保存在数据库中,但我似乎找不到合适的方法来执行此操作。

对于该项目,我将 Wildfly 与 Hibernate 结合使用。我知道我可以制作一个 import.sql 来做我想做的事,但这对我的使用来说并不是最佳选择,因为预设实体有很多属性更容易设置为 .java 文件。

这是我的 Simulation.java class 的摘录:

@javax.persistence.Entity
public class Simulation
{
/**
 * An automatically generated id
 */
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private int id;

/**
 * The simulation name, limited to 255 characters
 */
@NotBlank
@Length(max = 255)
private String name;

/**
 * Date the simulation was created
 */
@Temporal(TemporalType.TIMESTAMP)
private Date date;

/**
 * Result of the simulation
 */
@OneToOne(cascade = {CascadeType.ALL})
private SimulationResult result;

@Transient
@OneToMany(cascade=CascadeType.ALL)
private List<Consumer> consumers;

@Transient
@OneToMany(cascade=CascadeType.ALL)
private List<Producer> producers;

private int ticks;

private boolean preset;
[...]

如何创建一个实例并在部署时保留它?

您可以考虑使用 WildFly db-bootstrap 扩展 https://github.com/wildfly-extras/db-bootstrap/blob/master/README.md

您可以创建一个创业公司class:

@Singleton
@Startup
public class StartupBean {

   @PostConstruct
   private void startup() { ... }

}

您可以在启动方法中创建预设。