我有一个存储在GAE数据存储区中的持久化类.我已从课程中删除了其中一个属性.此表中的新记录显示<none
已删除属性的值>.但有没有办法可以完全放弃这个专栏?
谢谢.
根据moraes的建议添加了以下"迁移"代码,但未达到预期效果:
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query q = pm.newQuery(UserLogin.class);
Collection<UserLogin> list = (Collection<UserLogin>) q.execute();
Iterator<UserLogin> iter = list.iterator();
while (iter.hasNext()) {
UserLogin obj = (UserLogin) iter.next();
obj.setLoginDate(obj.getLoginDate());
}
pm.makePersistentAll(list);
} finally {
pm.close();
}
Run Code Online (Sandbox Code Playgroud) 现在我有java程序,其类目前是POJO并存储在易失性存储器中.这些都需要坚持下去.据我所知,两个流行的选择是JDO和Java Persistence API.对于那些对SQL,Torque等知之甚少的人来说,这是为程序数据添加持久性的最简单方法吗?
我试图找到有关该主题的任何信息; 找不到任何东西.让我觉得奇怪,因为JDO听起来像智能手机应该非常善于做的事情.
你知道JDOAndroid设备,本机或外部应用程序/库是否可行?
要在Google App Engine中识别我的JDO对象,我使用该Key
类型.它工作正常,但当我需要通过URL传递它时,它会变得有点长.
例如: http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA
在我的管理员查看器中查看我的实体时,我可以看到数据存储也为我的实体对象设置了一个"id",它似乎是一个增量数值,与Key字符串相比非常短.我可以使用它来获取有关我的对象的信息吗?我该怎么做呢?我尝试使用getObjectbyId()
id而不是密钥...它不起作用.
有任何想法吗?
我曾经让我的所有DAO扩展了JdoDaoSupport
类,现在在Spring 3.1中已经弃用了.我已经创建了自己的AbstractJdoDao
类,包装了PersistenceManagerFactory
所有DAO并从那里扩展.这是我应该做的方式吗?
另外在JDO的文档中,似乎直接实例化PersistenceManagerFactory
不是默认选项,而是使用LocalPersistenceManagerFactoryBean
包装在一个TransactionAwarePersistenceManagerFactoryProxy
.如何正确地实例化这些bean并使它们与Spring的@Transactional
注释一起使用.
这是我的应用程序上下文中与持久性相关的部分:
<bean id="persistenceManagerFactoryProxy" class="org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy">
<property name="targetPersistenceManagerFactory">
<bean class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
<property name="jdoPropertyMap">
<props>
<prop key="javax.jdo.PersistenceManagerFactoryClass">org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory</prop>
<prop key="javax.jdo.option.ConnectionURL">appengine</prop>
<prop key="javax.jdo.option.NontransactionalRead">true</prop>
<prop key="javax.jdo.option.NontransactionalWrite">false</prop>
<prop key="javax.jdo.option.RetainValues">false</prop>
<prop key="javax.jdo.option.DetachAllOnCommit">true</prop>
<prop key="javax.jdo.option.Multithreaded">true</prop>
<prop key="datanucleus.appengine.ignorableMetaDataBehavior">NONE</prop>
</props>
</property>
</bean>
</property>
<property name="allowCreate" value="false" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jdo.JdoTransactionManager">
<property name="persistenceManagerFactory" ref="persistenceManagerFactoryProxy" />
</bean>
Run Code Online (Sandbox Code Playgroud)
现在,当我加载访问数据存储的页面时:
org.springframework.transaction.CannotCreateTransactionException: Could not open JDO PersistenceManager for …
Run Code Online (Sandbox Code Playgroud) 我正在使用Google App Engine(appengine-java-sdk-1.6.6)为使用JDO和maven(maven-gae-plugin)的应用程序进行项目结构和构建.构建是成功的,同时使用DataNucleus Enhancer增强我的域类.
运行应用程序时,我遇到此问题:找不到类org.datanucleus.api.jdo.PersistenceManagerFactoryClass.任何人都可以建议.谢谢
PS:我已经做了一个grep(在linux上)在APP Engine SDK文件夹中找到PersistenceManagerFactoryClass,我找不到它.
Could not instantiate bean class [com.peerbuccoss.apps.mtp.dao.impl.CommonDaoImpl]: Constructor threw exception; nested exception is javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo.PersistenceManagerFactoryClass was not found.
NestedThrowables:
java.lang.ClassNotFoundException: org.datanucleus.api.jdo.PersistenceManagerFactoryClass:
java.lang.ClassNotFoundException: org.datanucleus.api.jdo.PersistenceManagerFactoryClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at javax.jdo.JDOHelper$18.run(JDOHelper.java:2018)
at javax.jdo.JDOHelper$18.run(JDOHelper.java:2017)
at java.security.AccessController.doPrivileged(Native Method)
at javax.jdo.JDOHelper.forName(JDOHelper.java:2015)
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1162)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1093)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:919)
Run Code Online (Sandbox Code Playgroud) GWT有一个编辑器框架,经过粗略的检查,看起来非常像Spring MVC/Forms如何处理后端数据对象和前端UI组件之间的数据绑定.
我正在编写我的第一个GWT/GAE应用程序,并想知道是否有任何方法可以将此编辑框架与 GAE的JDO/Atomic库结合使用,这是您针对应用程序和基础数据存储区之间的O/R映射编写的API .
这两个框架是互补的还是相互排斥的?如果他们可以一起工作,有人可以提供一个小代码示例,说明我如何使用它们来填充一个<select>
带有名单列表的HTML 框,或者其他基本但实用的东西.
我想这可能涉及一个Person
POJO代表一个人(并且有一个String name
属性),也许某种PersonDAO
使用JDO/Atomic到CRUD Person
实例到/来自数据存储区,然后某种类型Editor<Person>
可以将Person
实例映射到前端<select>
s.
如果我能看到一个有效的例子,我认为它将全部聚集在一起.并且,如果这些是彼此排斥的并且不能一起使用,那么为什么会被非常感谢的可靠解释!提前致谢!
我在Google应用引擎中部署了一个应用程序.当我在更新该实体后立即通过id获取实体时,我得到的数据不一致.我正在使用JDO 3.0来访问应用程序引擎数据存储区.
我有一个实体员工
@PersistenceCapable(detachable = "true")
public class Employee implements Serializable {
/**
*
*/
private static final long serialVersionUID = -8319851654750418424L;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY, defaultFetchGroup = "true")
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private String id;
@Persistent(defaultFetchGroup = "true")
private String name;
@Persistent(defaultFetchGroup = "true")
private String designation;
@Persistent(defaultFetchGroup = "true")
private Date dateOfJoin;
@Persistent(defaultFetchGroup = "true")
private String email;
@Persistent(defaultFetchGroup = "true")
private Integer age;
@Persistent(defaultFetchGroup = "true")
private Double salary;
@Persistent(defaultFetchGroup = "true") …
Run Code Online (Sandbox Code Playgroud) java google-app-engine jdo datanucleus google-cloud-datastore
我正在尝试使用Google App Engine和持久选项JDO.我想知道是否可以将瞬态对象映射到持久对象?或者使用瞬态对象来更新持久对象?
我在编码示例中看到以下代码片段来更新对象:
public void updateEmployeeTitle(User user, String newTitle) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Employee e = pm.getObjectById(Employee.class, user.getEmail());
if (titleChangeIsAuthorized(e, newTitle) {
e.setTitle(newTitle);
} else {
throw new UnauthorizedTitleChangeException(e, newTitle);
}
} finally {
pm.close();
}
}
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的,有人知道我是否可以像JPA那样更新整个对象:object.update();
所以我想要这样的事情:
public User update(User u) {
PersistenceManager pm = PMF.get().getPersistenceManager();
User usr;
try {
usr = pm.getObjectById(User.class, u.getId());
// copy transient object u to persist object usr.
// on update of usr all changes in object u are …
Run Code Online (Sandbox Code Playgroud) 我们在其中一个项目中使用JDO.这已经运行了很长一段时间,我们自然需要稍微改变模型.
在JDO中迁移实体类中的字段时,最佳做法是什么?
enum MyEnum {
REGULAR,
MYOLDTYPE // Delete this
}
@PersistenceCapable
public class Entity {
@Persistent
MyEnum myEnumType;
@Persistent
String myString; // Rename this
}
Run Code Online (Sandbox Code Playgroud)
如果我删除枚举值,如果从数据库加载时已经存在异常,那么如何迁移它?
如果我想将myString重命名为myNewString,如何将列重命名为新名称?
jdo ×10
java ×7
datanucleus ×2
android ×1
database ×1
datastore ×1
gwt ×1
persistence ×1
schema ×1
spring ×1