当它们出现在a的场/吸气器上时@Entity,它们之间有什么区别?(我通过Hibernate坚持实体).
每个人都属于哪个框架和/或规范?
@NotNull位于javax.validation.constraints.在javax.validation.constraints.NotNulljavadoc中它说
带注释的元素不能为null
但是它没有提到元素在数据库中的表示,那么为什么我nullable=false要将约束添加到列中呢?
Hibernate有一些方法,以这种或那种方式,获取对象并将其放入数据库.它们之间有什么区别,什么时候使用哪个,为什么不存在一个知道何时使用什么的智能方法?
到目前为止我发现的方法是:
save()update()saveOrUpdate()saveOrUpdateCopy()merge()persist()我正在尝试使用org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy我的Spring项目,但我不确定如何使用它或者它是否正是我正在寻找的.我意识到它可以帮助我的DAO使用简单的JDO PersistenceManagerFactory.另一个问题是:如果代理没有正确完成会发生什么?我还可以使用它来访问我的工厂来创建一个事务感知持久性管理器吗?如果工厂管理的对象是单例,这会改变吗?为什么不直接访问PersistenceManagerFactory?也许PersistenceManagerFactoryUtils.getPersistenceManager更适合我的需求?可以getObject返回null吗?
我在META-INF目录下使用toplink,使用相同名称的persistence.xml.然后我让我的代码调用它:
EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息
2009-07-21 09:22:41,018 [main] ERROR - No Persistence provider for EntityManager named agisdb
javax.persistence.PersistenceException: No Persistence provider for EntityManager named agisdb
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
这是persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="agisdb">
<class>com.agis.livedb.domain.AddressEntity</class>
<class>com.agis.livedb.domain.TrafficCameraEntity</class>
<class>com.agis.livedb.domain.TrafficPhotoEntity</class>
<class>com.agis.livedb.domain.TrafficReportEntity</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
它应该在类路径中.然而,我得到了上述错误.
我正面临着我认为Hibernate的一个简单问题,但无法解决它(Hibernate论坛无法访问肯定没有帮助).
我有一个简单的课程,我想坚持,但继续得到:
SEVERE: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
[ a bunch more ]
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
[ a bunch more ]
Run Code Online (Sandbox Code Playgroud)
持久化类的相关代码是:
package hibtest.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Mensagem {
protected Long id;
protected Mensagem() { }
@Id
@GeneratedValue
public Long getId() {
return id;
} …Run Code Online (Sandbox Code Playgroud) JPA @Column和@Basic注释之间有什么区别?它们可以一起使用吗?如果他们可以一起使用吗?或者其中一个是否足够?
我正在收集有关flush()方法的信息,但我不清楚何时使用它以及如何正确使用它.根据我的阅读,我的理解是持久化上下文的内容将与数据库同步,即发出未完成的语句或刷新实体数据.
现在,我得到下列设想两个实体A和B(在一比一的关系,而不是由JPA执行或模拟).A有一个复合PK,它是手动设置的,还有一个自动生成的IDENTITY字段recordId.这recordId应该B作为外键写入实体A.我正在保存A并B进行单笔交易.问题是自动生成的价值A.recordId是不可用的事务中,除非我做的一个显式调用em.flush()打完电话后em.persist()上A.(如果我有一个自动生成的IDENTITY PK,那么该值将在实体中直接更新,但这不是这里的情况.)
可以em.flush()在一个事务中使用时造成什么伤害?
我遇到过一种情况(我觉得很奇怪,但可能很正常),我使用EntityManager.getReference(LObj.getClass(),LObj.getId())获取数据库实体,然后将返回的对象传递给坚持在另一张桌子上.
所以基本上流程是这样的:
class TFacade{
createT(FObj, AObj) {
T TObj = new T();
TObj.setF(FObj);
TObj.setA(AObj);
...
EntityManager.persist(TObj);
...
L LObj = A.getL();
FObj.setL(LObj);
FFacade.editF(FObj);
}
}
@TransactionAttributeType.REQUIRES_NEW
class FFacade{
editF(FObj){
L LObj = FObj.getL();
LObj = EntityManager.getReference(LObj.getClass(), LObj.getId());
...
EntityManager.merge(FObj);
...
FLHFacade.create(FObj, LObj);
}
}
@TransactionAttributeType.REQUIRED
class FLHFacade{
createFLH(FObj, LObj){
FLH FLHObj = new FLH();
FLHObj.setF(FObj);
FLHObj.setL(LObj);
....
EntityManager.persist(FLHObj);
...
}
}
我得到以下异常"java.lang.IllegalArgumentException:未知实体:com.my.persistence.L $$ EnhancerByCGLIB $$ 3e7987d0"
在查看了一段时间之后,我终于想通了,因为我正在使用EntityManager.getReference()方法,因为该方法正在返回代理,所以我得到了上述异常.
这让我想知道,何时建议使用EntityManager.getReference()方法而不是EntityManager.find()方法?
如果EntityManager.getReference()无法找到正在搜索的实体本身非常方便,则会抛出EntityNotFoundException.如果EntityManager.find()方法无法找到实体,则它仅返回null.
关于事务边界,听起来像你需要在将新发现的实体传递给新事务之前使用find()方法.如果你使用getReference()方法,那么你可能会遇到类似我的情况,但有上述异常.
对于我正在编写的插件,我在很大程度上依赖于localStorage.所有用户设置都存储在其中.某些设置要求用户使用写正则表达式,如果他们的正则表达式规则在某些时候消失,他们会很难过.所以现在我想知道localStorage是多么持久.
从规格:
用户代理应仅出于安全原因或用户请求时从本地存储区域过期数据.
以上看起来就像客户端上的cookie一样.即,当用户清除所有浏览器数据(历史记录,cookie,缓存等)时,localStorage也将被截断.这个假设是否正确?
我是Java世界和JPA的新手.我正在学习JPA,并遇到了许多新的术语,如实体,持久性.在阅读时,我无法理解持久化上下文的确切定义.
任何人都可以用简单的外行来解释它吗?它与使用的数据有@Entity什么关系?
例如,我发现这个定义太复杂,无法理解:
持久化上下文是一组实体,对于任何持久性标识,都存在唯一的实体实例.
persistence ×10
java ×8
jpa ×6
hibernate ×4
dao ×1
ejb-3.0 ×1
java-ee ×1
javascript ×1
jdo ×1
jpa-2.0 ×1
orm ×1
spring ×1
toplink ×1
transactions ×1