使用JPA,我们可以将枚举定义为实体的id吗?
我尝试过以下方法:
public enum AssetType {
....
}
@Entity
@IdClass(AssetType.class)
public class Adkeys {
private AssetType type;
@Id
@Enumerated(EnumType.STRING)
@Column(nullable = false)
public AssetType getType() {
return type;
}
}
Run Code Online (Sandbox Code Playgroud)
使用OpenJPA,它抱怨:
org.apache.openjpa.persistence.ArgumentException:该ID级别"类aa.AssetType"按类型"类aa.Adkeys"规定不具有公共的无参数的构造.
所以我的问题是:
在eclipse的运行配置中,为您提供了一组默认变量,您可以在VM参数中使用它们,例如container_path和env_var.
我想要访问的是一个类路径变量M2_REPO,但是看不到这样做的方法.我需要在VM参数中指定一个javaagent,它需要一个jar文件的路径.这个jar文件存在于maven存储库中,但我找不到使用已配置的M2_REPOClasspath变量(在windows- > preferences- > java- > Build Path- >中配置)指定maven存储库的路径的方法Classpath variable.
我想要做的是使用它作为我的VM参数,但不能因为classpath_var它不是一个真正的变量.
-javaagent:${classpath_var:M2_REPO}/org/apache/openjpa/openjpa/2.1.0/openjpa-2.1.0.jar
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以访问M2_REPOVM参数的值?
我Integer在数据库中有两列(derby和db2).我需要在里面把它们分开JPQL.
Integer如果余数是十进制数,则两个类型都返回零,例如0.25变为0等等,因为类型是int,因此可以理解.
在SQL我能有这个例如
select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable;
但JPQL等同的是什么.
一个选项可能是(我还没有尝试过)是@Transient在实体中有一个方法返回Decimal类型并在那里进行计算并将其传递给JPQL但是我宁愿让SQL这个工作.
Mysql不需要在数据库级别进行转换.所以不同RDBMS的行为是不同的,这很好.但是,JPQL应该如何处理需要使用本机查询才能知道此操作需要使用强制转换为十进制.
添加方言<property name="openjpa.jdbc.DBDictionary" value="derby"/>也没有解决它.
请注意它是JPA1
我正在使用带有buildin OpenJPA 1.2.3和Oracle数据库的Websphere Application Server 7.我有以下实体:
@NamedNativeQuery(name=Contract.GIVE_ALL_CONTRACTS,
query="SELECT number, name \n" +
"FROM contracts \n" +
"WHERE startdate <= ?1 \n" +
"AND enddate > ?1",
resultSetMapping = Contract.GIVE_ALL_CONTRACTS_MAPPING)
@SqlResultSetMapping(name = Contract.GIVE_ALL_CONTRACTS_MAPPING,
entities = { @EntityResult(entityClass = Contract.class, fields = {
@FieldResult(name = "number", column = "number"),
@FieldResult(name = "name", column = "name")
})
})
@Entity
public class Contract {
public static final String GIVE_ALL_CONTRACTS = "Contract.giveAllContracts";
public static final String GIVE_ALL_CONTRACTS_MAPPING = "Contract.giveAllContractsMapping";
@Id
private Integer number;
private String …Run Code Online (Sandbox Code Playgroud) 我尝试使用Springs CrudRepository接口将实体持久化到PostgreSQL数据库时遇到问题.我在TomEE上调整正确的值并调整Spring本身的配置时遇到了一些问题.我曾尝试使用hibernate,但问题变得更糟,所以我切换回与TomEE捆绑在一起的OpenJpa.
我有一些普通JavaEE的经验,我正在创建这个应用程序来学习Spring,我的一个朋友需要一个Spring应用程序来在基于TomEE的ApplicationServer上进行部署,因此这两个是需求.我可能会对我附加的代码量有点过分,但我宁愿让你看看有什么,所以你得到了一个很好的概述.
我开发的组件以及我正在做什么,期待和实际看到的简要描述.组件:
我的行动流程:
我期待的是:
我看到的和我看不到的但希望看到的:
在通过google,SO和许多教程尝试所有不同类型的故障排除后,我的配置文件变得非常混乱.现在花了几天时间试图找出问题所在,我现在来到这里,希望你能指出我的错误.
Coworker.java
@Entity
public class Coworker implements Serializable {
@Transient
Logger logger = LoggerFactory.getLogger(this.getClass());
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long coworkerId;
private String firstName;
private String lastName;
@Temporal(TemporalType.DATE)
private Date creationDate;
@Temporal(TemporalType.DATE)
private Date lastUpdatedDate;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "coworker", fetch = …Run Code Online (Sandbox Code Playgroud) 我们在persistence.xml文件中使用了波纹管属性.
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="javax.persistence.jdbc.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@XYZDB01:78111:TATAD1" />
<property name="javax.persistence.jdbc.user" value="admin" />
<property name="javax.persistence.jdbc.password" value="admin@123" />
<property name="javax.persistence.jdbc.Schema" value="CSMVC" />
</properties>
Run Code Online (Sandbox Code Playgroud)
但我希望将persistence.xml中的动态属性外部化为类似于bellow的东西.
<properties>
<property name="javax.persistence.jdbc.driver" value="${db.driver}" />
<property name="javax.persistence.jdbc.dialect" value="${db.dialect}" />
<property name="javax.persistence.jdbc.url" value="${db.url}" />
<property name="javax.persistence.jdbc.user" value="${db.user}" />
<property name="javax.persistence.jdbc.password" value="${db.password}" />
<property name="javax.persistence.jdbc.Schema" value="${db.schema}" />
</properties>
Run Code Online (Sandbox Code Playgroud)
注意:我们使用openJpa作为JPA提供程序.
我使用JPA 2.0和OpenJPA作为底层实现.我有一个映射到自身的实体来表示实体之间的父子层次结构.一个实体最多可以有一个以上的子女,但只有一个父母.因此,没有父级的实体位于层次结构的顶层.我的目标是从数据表中获取所有层次结构.所以我的查询为:
SELECT e FROM MyEntity e where e.parent is null
Run Code Online (Sandbox Code Playgroud)
在MyEntity中,我完成了映射:
@ManyToOne
@JoinColumn(name="PARENT")
private MyEntity parent;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
private List<MyEntity> children;
Run Code Online (Sandbox Code Playgroud)
当程序运行时,层次结构顶部的实体将填充其所有子项,但子实体不会获取其子项.我认为EAGER提取将填充整个实体图.但事实并非如此.在JPA 2.1中有EntityGraph ASAIK的功能.但是如何在JPA 2.0中实现呢?
是否有人成功使用OpenJPA与Glassfish?
我正在尝试将OpenJPA 2.1与Glassfish 3.1 Open Source一起使用.我按照说明将这两个集成在这里 - > http://weblogs.java.net/blog/ss141213/archive/2006/07/using_openjpa_a.html
我在Eclipse Indigo中有一个非常简单的EJB项目,具有以下内容:
但是,当我尝试部署时,我的Person @Entity上会出现ClassNotFoundException.投诉似乎是在我的PersonDao中实现的创建方法的Person parm(参见下面的所有代码).
我已经尝试了相同的项目而没有在persistence.xml中指定提供程序,并且该项目工作正常(能够将Person @Entity持久保存到MySql中的PERSON表).如果我没有指定提供者,我想我正在使用EclipseLink(如果我错了,请纠正我).这让我相信我没有正确配置OpenJPA和Glassfish.
Caused by: java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: com.rares.test.Person
at serp.util.Strings.toClass(Strings.java:164)
at serp.util.Strings.toClass(Strings.java:108)
at serp.bytecode.BCClass.getType(BCClass.java:566)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:283)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:254)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:144)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124)
at org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl.transform(PersistenceProviderImpl.java:294)
at org.glassfish.persistence.jpa.ServerProviderContainerContractInfo$1.transform(ServerProviderContainerContractInfo.java:98)
at com.sun.enterprise.loader.ASURLClassLoader.findClass(ASURLClassLoader.java:742)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.privateGetPublicMethods(Class.java:2547)
at java.lang.Class.getMethods(Class.java:1410)
at com.sun.enterprise.deployment.EjbDescriptor.addAllInterfaceMethodsIn(EjbDescriptor.java:2327)
at com.sun.enterprise.deployment.EjbDescriptor.getLocalRemoteBusinessMethodDescriptors(EjbDescriptor.java:2290)
... 40 more
Run Code Online (Sandbox Code Playgroud)
@Entity
@Table (name="PERSON")
public class Person implements Serializable …Run Code Online (Sandbox Code Playgroud) 我使用 JPA + OpenJPA 和 PostgreSQL 作为后端 RDBMS。我的表的主键通常由SERIAL/BIGSERIAL列组成。因此 PostgreSQL 会自动为新条目 ( strategy=GenerationType.IDENTITY)生成 ID 。
ID 属性的注释如下所示:
@Id
@SequenceGenerator(name="myseq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="myseq",strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)
我的问题是:我可以将此注释块复制并粘贴到多个实体,同时只修改sequenceName值吗?该sequenceName是从桌到桌不同。但是所有实体的 SequenceGenerator 都可以命名myseq吗?还是必须为每个实体的 SequenceGenerator 指定一个唯一的生成器名称?那么每个 SequenceGenerator 名称在持久化单元中必须是唯一的吗?
使用与数据库中的 sequenceName 相同的值可能是个好主意吗?所以我会写一些类似的东西
@Id
@SequenceGenerator(name="foobartable_fooid_seq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="foobartable_fooid_seq",strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)
关于如何命名 SequenceGenerator 的任何建议?
非常感谢您的任何建议!
你的 Snrub 先生
我正在将 ORM 框架从 Hibernate 切换到 OpenJPA。
在 Hibernate 中,我们可以使用 @ColumnTransformer 注释字段,如下所示。
@Column(name = "EMP_NAME", length = 4000)
@ColumnTransformer(
read = "pgp_pub_decrypt(emp_name::bytea,dearmor('"+key1+"'))",
write = "pgp_pub_encrypt(?, dearmor('"+key2+"'))"
)
private String empName;
Run Code Online (Sandbox Code Playgroud)
如何在 OpenJPA 中执行相同操作
openjpa ×10
java ×7
jpa ×7
postgresql ×2
classpath ×1
eclipse ×1
ejb ×1
entitygraph ×1
glassfish ×1
hibernate ×1
java-ee ×1
maven-3 ×1
orm ×1
persistence ×1
sequence ×1
spring ×1
tomcat ×1
websphere ×1
websphere-7 ×1