Tag: 持久性

如何获得过滤后的模型?

我正在使用JTables显示用户可以过滤的信息,如果用户在过滤后保存,我想将过滤后的表保存到文本文件中以保持持久性(意味着任何过滤掉的内容都不会保存到文本文件中)。 对于过滤我只是按照本教程的过滤部分: http : //download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting并且它工作正常,但我不确定是否有任何方法我可以获得当前显示的模型,而不是包含尚未过滤掉的所有内容的基础模型。 有什么方法可以用我过滤的方式来做到这一点吗? 谢谢!

JPA EntityManager和JavaFx

我尝试在NetBeans中的JavaFx应用程序中使用EntityManager(我的解决方案连接到postgres),我按如下方式进行: 1)我创建了一个持久单元。 2)然后从数据库添加实体类。 但是我无法让它工作,我试图在另一个线程中寻求帮助实体管理器不能在JavaFX中工作,但也无法使它工作,是否有任何干净清晰的教程或课程,我可以清楚地找到在JavaFx Fxml应用程序中使用EntityManager

如何在DDD中实现持久无知?

我正在处理涉及Workspace的项目的持久层,每个项目可能包含零个,一个或多个Document 。 (我试图遵循领域驱动设计原则,但我的问题可能与此没有直接关系。) 问题1:我应该分离出持久性吗? 即,您是否以这样的方式设计实体和价值类 在内存中创建实体和值,就像没有持久性一样(可能使用Factory方法Workspaces.newWorkspace(…) ),以及 调用一个单独的persist()方法(可能在存储库中)来处理持久性? 或者我的工厂方法Workspaces.newWorkspace()应该创建一个持久化实体(一旦事务关闭就会持久化)? 如果这个问题的答案是“分离,伙计!” 然后我想知道如何以优雅的方式实现这一目标。 我的第一种方法是(在Scala伪代码中): class Workspace(title: String, documents: List[Document], id: Option[Long]) { def add(d: Document) = // … def remove(d: Document) = // … } 但是,如果工作空间可以包含许多文档,则这不是很好(受RAM限制)。 我的下一个方法是“如何不向实体注入服务” ,这是: class Workspace(title: String, docSupplier: DocSupplier, id: Option[Long]) { def add(d: Document) = docSupplier.add(d) def remove(d: Document) = docSupplier.remove(d) } […]

这些方法如何在磁盘上丢失/导致数据丢失?

我有一个程序,每隔一段时间(15秒左右)将其设置和数据写入磁盘。 如果程序正在运行并且计算机突然关闭 – 例如,在墙上切断电源 – 不知何故,磁盘上的所有数据文件都将更改为空文件。 这是我的代码,我认为我的目的是为了防止这种失败,但基于测试失败仍然存在: SaveAllData – 经常调用,也调用JavaFX.Application.stop()。 public void saveAllData () { createNecessaryFolders(); saveAlbumsAndTracks(); saveSources(); saveCurrentList(); saveQueue(); saveHistory(); saveLibraryPlaylists(); saveSettings(); saveHotkeys(); } CreateNecessaryFolders private void createNecessaryFolders () { if ( !playlistsDirectory.exists() ) { boolean playlistDir = playlistsDirectory.mkdirs(); } } 保存function – 它们看起来都像这样 public void saveCurrentList () { File tempCurrentFile = new File […]

JPA内存管理问题

首先,一点背景。 我正在研究从SQL Server中提取数据的管理软件。 我正在使用JPA创建表的Entity实例以便在管理软件中进行操作(我现在只使用JPA几天)。 作为测试,我将下面的代码汇总在一起,以测试存储多少内存将占用最丰富的表(PeriodicalTable)的对象,这些表有18,500行(或大约有)并且只能增长; public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory(“PersistenceDemoPU”); EntityManager em = emf.createEntityManager(); Query query = em.createQuery(“SELECT p FROM PeriodicalTable p”); //query.setMaxResults(7000); List results = query.getResultList(); PeriodicalTable storedPlayer; for (int i = 0; i < results.size(); i++){ storedPlayer = results.get(i); System.out.println(storedPlayer.toString()); if (i == (results.size()-1)){System.out.println("Total results: "+(i+1)); } } […]

如何使用通用存储库包装Play / JPA的Model类?

我不喜欢直接使用模型对象,因为这打破了封装。 相反,我更喜欢存储库模式 。 当我尝试实现一个简单的存储库时 public abstract class BaseRepository { public T findOne(String query, Object… params) { GenericModel.JPAQuery result = T.find(query, params); return result.first(); } } public class UserRepository extends BaseRepository{} UserRepository repo = new UserRepository(); repo.findOne(“byUsername”, “test”); 由于java的generics或JPA注释的工作方式,我得到了exception: java.lang.UnsupportedOperationException: Please annotate your JPA model with @javax.persistence.Entity annotation. at play.db.jpa.GenericModel.find(GenericModel.java:269) at repositories.BaseRepository.findOne(BaseRepository.java:12) 有没有解决的办法? (不用说模型是正确注释的,当我直接使用它时说User.find(“byUsername”, “test”).first()运行良好)。

在收集字段更改时触发JPA侦听器

我正在使用EntityListeners( @PreUpdate )在我的实体更改后执行某些操作。 但是我注意到实体内部集合的更改不会触发JPA实体侦听器,这是有道理的,因为包含该实体的表没有更改,但是有多对多的表。 有没有办法让实体监听器在集合发生变化时触发?

如何在hibernate中保留实体期间validation实体上的约束

我有一个带字段名称的实体,我希望它不超过255,所以我这样定义: @Entity public class A implements Serializable { … @NotNull @Size(max=255) private String name; 我希望它在我调用a.persist()时得到validation,因此如果name太长则抛出exception。 我在validation.xml中定义了HibernateValidator: org.hibernate.validator.HibernateValidator org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator org.hibernate.validator.engine.resolver.DefaultTraversableResolver org.hibernate.validator.engine.ConstraintValidatorFactoryImpl 但它不起作用。 在持久化期间不会抛出exception,并且仅在提交期间,当刷新实体管理器时,我是否得到exception,即使这样,它也是数据库中的exception(因为它对大小为255的列也有限制)。 所以我相信我的validation根本不起作用。 如果你帮助我解决这两个问题,我会很高兴:1)如何在持久化期间进行validation而不是在刷新期间2)如何在validation失败时导致validation抛出exception?

应该嵌入jpa类实现equals和hashCode吗?

假设我有以下情况: @Entity public class Person { @Id private Long id; //Surrogate key @Embedded private Name name; //Natural key public int hashCode() { … //based on natural key Name } public boolean equals(Object obj) { … //based on natural key Name } } @Embeddable public class Name { private String firstName; private String middleName; private String […]

如何防止“本地事务已经有1个非XA资源”exception?

我在无状态EJB中使用2 PU,并且在一个方法上调用它们: @PersistenceContext(unitName=”PU”) private EntityManager em; @PersistenceContext(unitName=”PU2″) private EntityManager em2; @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW ) public void getCandidates(final Integer eventId) throws ControllerException { ElectionEvent electionEvent = em.find(ElectionEvent.class, eventId); … Person person = getPerson(candidate.getLogin()); … } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW ) private Person getPerson(String login) throws ControllerException { Person person = em2.find(Person.class, login); return person; } 这些方法使用REQUIRES_NEW transcaction进行注释以避免此exception。 当我从javaFX applet调用这些方法时,所有方法都按预期工作。 现在我试图从JAX-RS webservice调用它们(我没有看到任何逻辑上的区别,因为在初始上下文中查找了ejb两种情况)并且我一直得到这个exception。 […]