EntityManager.persist()的文档说它将Make an instance managed and persistent。
它将实体持久化到数据库,但是当我调用EntityManager.contains()方法来检查我刚刚持久化的实体是否受管理时,它返回false。
我只想知道为什么会这样?也许有些事情是我做不到的,或者是我忽略了的?
建议将不胜感激:D
我正在学习JPA实体生命周期,我想了解‘分离’实体。下面是我的代码,
//Creating a new employee with id and name field
Employee e = new Employee("1001","Sasi");
em.getTransaction().begin();
em.persist(e);
em.getTransaction().commit();
//Detaching Employee from Persistence context
em.detach(e);
//Persistin
我正在学习hibernate,并逐渐知道它是一个ORM工具。
考虑以下场景:
@Entity
@Table(name="USER_DETAILS")
public class UserInfo {
@ElementCollection
Set<Address> addressList = new HashSet<Address>();
// Some other code...
}
主要应用:
public class MainApp {
public static void main(String s[]) {
我有以下代码,其中em是EntityManager:
Query query = em.createQuery( "SELECT e FROM TODO e " );
ret = (TODO) query.getSingleResult();
em.detach( ret );
return ret;
一旦我从这个方法返回ret (并离开类),实体管理器就不会分离了吗?为什么我需要使用分离方法呢?
我真的很困惑于独立的和短暂的实体之间。根据该定义,瞬态实体不与会话相关联,也没有DB记录。分离的实体与会话相关联,并具有DB记录。所以对前男友来说。如果我有个人桌。person表中有一个id为2的记录。因此,如果我执行以下操作:
Person p = new Person();
p.setId(2);
实体p是否被认为是分离的,因为它有DB记录,但不与会话相关联?还是会被认为是暂时的?如果是瞬态的,那么下面的代码是否是创建独立实体的正确示例?
Person p = session.load(Person.class,2);
session.evict(p); // does this make
我有两个实体类--组织类和用户类,它们具有一对多的关系(Groovy!):
@Entity
class Organisation {
@Id Long id
String name
@OneToMany
List<User> users
}
@Entity
class User {
@Id Long id
String username
@ManyToOne(optional=false, cascade = CascadeType.Persist)
Organisation organisation
}
当我用一个新的组织创建一个新用户时,一切
无法保存子对象引用。
Employee父对象包含子employee_detail,它还定义了一个@ManyToOne以保存Address对象。
表结构
EMPLOYEE
ID BIGINT(20) NOT NULL AUTO_INCREMENT
NAME VARCHAR(100) NOT NULL
EMPLOYEE_DETAIL
ID BIGINT(20) NOT NULL AUTO_INCREMENT
EMPLOYEE_ID BIGINT(20) NOT NULL
ADDRESS_ID BIGINT(20) NOT NULL
实体
@Enti
我很难弄清楚如何为以下实体正确设置JPA持久性(使用EclipseLink和事务类型=“RESOURCE_LOCAL”):
@Entity
public class User {
// snip various members
@ManyToMany
private List<Company> companies;
public void setCompanies(List<Company> companies) {
this.companies = companies;
}
}
@Entity
pub
如何知道持久化方法是否有效?我只能想到两种解决方案,但肯定有一些更直接或准备这一点。无论如何,我想知道是否有人知道这个解决方案的问题,还是更好的选择?谢谢?
当我使用时,我没有返回来检查该方法是否成功完成。(可能是布尔值,也可能是实体本身来检查id)
UserEntity e = new UserEntity();
e.setName("Name");
e.setAge(30);
em.persist(e);
Option#1 EntityManger包含方法
UserEntity e = new UserEntity();
e.setName("Name")
我知道在删除实体之前必须合并它,但我从来没有想过要在EJB中这样做。首先,我有以下内容:
e = (Event) scholarBean.merge(e);
scholarBean.remove(e);
在我的托管bean中。它会给我这个错误
java.lang.IllegalArgumentException: Entity must be managed to call remove: com.scholar.entity.Event@998, try merging the detached and try the remove again.
然后,我将这两行代码放入会话bean中,它就
我使用JPA实现EclipseLink和MySQL服务器作为应用程序的持久层。我的问题是,一个已经持久化并且已经有id的对象,正在通过与CascadeType.All的多对一关系再次被插入。
这里是实体:
@Entity
@Table(name = "messages")
public class Message extends DbObject {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
public User author;
p
我有两个实体和一个会话bean,如下所示:
@Entity
public class Manager {
@Id
private int managerId;
private String name;
@OneToMany(mappedBy = "manager")
private Set<Department> departments;
//... constructors, getters and setters
}
@Entity
public class Department {
@Id
当我尝试使用jpa2.0更新包含持久化实体和分离实体(新创建的实体)到我的数据库中的实体列表时,我得到了一个错误。我的实体包含内部实体,它们在合并数据时出现错误(在标题中提到):
Class superclass{
private A a;
private string name;
//getter setters here...
}
Class A{
private long id;
@onetoone(cascade=CascadeType.All, fetch=FetchType.Eager)
private B b;
@on