Tag: eclipselink

Eclipselink更新现有表

也许我弄错了但我认为JPA能够更新现有的表(模型更改添加列)但在我的情况下不起作用。 我可以在日志中看到eclipselink尝试创建它但失败因为它已经存在。 而不是尝试更新添加列,它继续前进。 这是改变的表格(在线栏目添加) [EL警告]:2010-05-31 14:39:06.044 – ServerSession(16053322) – 例外[EclipseLink-4002](Eclipse Persistence Services – 2.1.0.v20100517-r7246):org.eclipse.persistence.exceptions .DatabaseException 内部exception:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表’帐户’已存在 错误代码:1050 调用:CREATE TABLE帐户(ID INTEGER NOT NULL,USERNAME VARCHAR(32)NOT NULL,SECURITY_KEY VARCHAR(255)NOT NULL,EMAIL VARCHAR(64)NOT NULL,STATUS VARCHAR(8)NOT NULL,TIMEDATE DATETIME NOT NULL,PASSWORD VARCHAR (255)NOT NULL,ONLINE TINYINT(1)默认值0 NOT NULL,PRIMARY KEY(ID)) 查询:DataModifyQuery(sql =“CREATE TABLE帐户(ID INTEGER NOT NULL,USERNAME VARCHAR(32)NOT NULL,SECURITY_KEY VARCHAR(255)NOT NULL,EMAIL VARCHAR(64)NOT NULL,STATUS VARCHAR(8)NOT NULL,TIMEDATE DATETIME […]

如何使用JPA实现时态表?

我想知道如何使用EclipseLink在JPA 2中实现时态表 。 时间上我指的是定义有效期的表。 我面临的一个问题是引用表不再具有对引用表(时态表)的外键约束,因为引用表的性质现在它们的主键包括有效期。 我如何映射我的实体的关系? 这是否意味着我的实体不再与那些有效时间实体建立关系? 我是否应该在某种服务或专门的DAO中手动执行初始化这些关系的责任? 我发现的唯一一件事就是一个名为DAO Fusion的框架来处理这个问题。 有没有其他方法可以解决这个问题? 您能否提供有关此主题的示例或资源(带有时态数据库的JPA)? 这是一个数据模型及其类的虚构示例。 它起初是一个简单的模型,不需要处理时间方面: 第一种情景:非时间模型 数据模型 : 团队 : @Entity public class Team implements Serializable { private Long id; private String name; private Integer wins = 0; private Integer losses = 0; private Integer draws = 0; private List players = new ArrayList(); public Team() […]

jpa会回收什么collections品?

JPA(在这种情况下是Eclipselink)是否总是返回IndirectList,其中Entity有一个List? 好的那个列表或它应该转换为另一个列表(也许是链表)?

使用@IdClass和*嵌套*复合主键限制JPA 1.0?

给出以下示例(部门 – 项目): 部门具有以下属性(复合主键): @Entity @IdClass(DeptId.class) public class Department { @Id @Column(name=”number”) private Integer number; @Id @Column(name=”country”) private String country; @Column(name=”name”) private String name; @OneToMany(mappedBy=”dept”) private Collection projects; … } 这里的PK类: public class DeptId implements Serializable { private Integer number; private String country; … } 项目和部门之间的关系是多对一的,那就是一个可以有很多项目的deptartment。 Project类本身使用复合键引用Department的复合键。 重要提示:它仅与@IdClass的实现有关,而不是@EmbeddedId。 然后(有问题的)JPA 1.0 @IdClass实现必须看起来像那样(冗余的deptNum和deptCtry属性): – >它只是一个部门内的唯一名称 @Entity @IdClass(ProjectId.class) […]

EclipseLinke:没有名为META-INF / services / javax.persistence.spi的资源文件:找不到PersistenceProvider

我正在使用EclipseLink,甚至我已经使用maven导入了所有必需的jar文件,我仍然得到了Exception: 线程“main”中的exceptionjavax.persistence.PersistenceException:找不到名为META-INF / services / javax.persistence.spi.PersistenceProvider的资源文件。 请确保持久性提供程序jar文件位于类路径中。 在Maven pom我有依赖: javax.persistence persistence-api 1.0.2 provided 这是我的persistence.xml: org.eclipse.persistence.jpa.PersistenceProvider com.testJPABasis.Person 在日食中的clathpath: 实际生成exception的类: public class TestJPA { public static void main(String[] args) { Person person = new Person(); person.setPersonID(1); EntityManagerFactory emf = Persistence.createEntityManagerFactory(“PersistenzJPAProjekt”); EntityManager em = emf.createEntityManager(); } } persistence.xml直接位于META-INF下。 据我所知,我不需要Glassfish或Tomcat,因为EclipseLink是为独立应用程序而制作的。 如果我错了,也许这就是原因。 Meta-Inf被放置在:

如何根据用户的选择动态生成SQL查询?

这是同一个问题: 如何根据用户的选择动态生成SQL查询? 唯一的区别是,我对使用Java / JPA(+可能是EclipseLink或Hibernate特定扩展)的解决方案感兴趣。 我需要创建一个GUI,用户可以使用该GUI选择几个属性,这些属性将用于查询数据库以查找合适的人员。 我正在寻找如何根据用户的选择动态生成数据库查询的想法。 查询将包含几个字段,但为了得到这个想法,我将仅包括下面的三个作为示例: 职业 – 可以有0到n个职业字符串。 如果给出了占用字符串,则其中一个必须匹配。 年龄 – 年龄可以给出: 完全匹配(30) 范围(例如30-40) 小于一个值(-40) 超过一个值(30-) Age参数在查询中是可选的。 此外,用户可以指定年龄是否为必需参数。 如果不是必需的,并且没有年龄的人是他/她的个人资料,则此人的年龄标准将被忽略。 身高 – 与年龄相似 示例查询: 没有给出任何标准: select * from persons 只有职业: select * from persons where occupation = ‘dentist’ 已经举办了几项职业: select * from persons where (occupation = ‘dentist’ or occupation = ‘engineer’) 年龄已被赋予大于值,并且需要存在于个人的个人资料中: select […]

如何在eclipselink中禁用缓存

我尝试使用persistence.xml中的以下属性在Eclipse indigo中禁用EclipseLink中的L2缓存: – NONE 基本上我正在测试一个场景,即在两个不同会话中创建的同一对象是否击中数据库两次,或者两个会话都指的是在内存缓存中的早期会话中创建的同一对象。 它不应该因为在persistence.xml中提到上述属性而禁用了L2缓存 我的代码如下: – Session session = DataAccessManager.getManager().openSession(); ReferenceObjectRepository referenceObjectRepository = ReferenceObjectRepository.getInstance(); ReferenceObjectKey referenceObjectKey = new ReferenceObjectKey(getStringValue(“testCacheByPass.input”)); //load object first time. ReferenceObject referenceObject = referenceObjectRepository.load(ReferenceObject.class, referenceObjectKey); logger.log(Level.SEVERE, “Cache ReferenceObject: ” + referenceObject); //load object in another session Session sessionNew = DataAccessManager.getManager().openNewSession(); Object dbObject = referenceObjectRepository.load(ReferenceObject.class, referenceObjectKey); logger.log(Level.SEVERE, “DB loaded ReferenceObject: ” […]

使用EclipseLink自定义JPA字段名称映射

由于历史原因,我需要在当前项目中使用EclipseLink将camel-case名称映射到以下划线分隔的名称。 我知道我们可以在JPA中单独定制名称映射,但我们有一长串的驼峰名称要更改,所以我们想要尽可能避免使用那种样板代码。 我想要达到的目的如下。 假设我们有一个实体类,如下所示: @Entity public class FooBar { @Id @GeneratedValue private Long id; @Temporal( TemporalType.TIMESTAMP ) private Date dateCreated; } 我希望这个类映射到名为“foo_bar”和列“id”和“date_created”的表。 请注意,数据库中的所有名称都是小写的。 我用Google搜索,找到了更改表名的解决方案。 但是,我无法弄清楚如何在实体类中更改字段名称。 下面是我的名称映射定制器,其中方法updateFieldNameMappings()没有将fieldName映射到field_name ,这是我想要实现的。 问题归结为如何在类定义中获取字段名称。 那么,我如何在EclipseLink中做到这一点? public class JpaNameMappingCustomizer implements SessionCustomizer { @Override public void customize( Session session ) throws Exception { Map descs = session.getDescriptors(); Collection descriptors = descs.values(); // This […]

如何使用EclipseLink重新连接丢失的连接?

我有问题,如果mySQL服务器在500秒“hibernate时间”后杀死会话,则下一个请求不成功。 如果mySQL服务器没有关闭睡眠连接,则可能在700秒后出现同样的问题。 我能做什么? 遵循我的persistence.xml的属性 如果知道重要事项,则事务类型为RESOURCE_LOCAL。

在JPA / EclipseLink中保留包含订单和重复项的列表

我基本上有两个实体Entity1和Entity2 。 Entity1包含以下代码: @OneToMany(cascade=CascadeType.PERSIST) @OrderColumn List e = new LinkedList(); 和Entity2包含一些东西,但没有任何相关性。 我想在列表e添加一些实例,最重要的是我想在列表中添加一些重复项(相同的引用)两次或更多次。 我仍然希望JPA坚持两者,我希望JPA坚持列表的顺序。 到目前为止,如果我只添加唯一的项目,这是有效的。 如果我添加一个副本,JPA实际上想要保留正确的数据(ID od Entity1,Entity2的ID和顺序),但由于关系表的主键只有两个ID,JPA会抛出重复的主键错误。 我怎么解决这个问题?