我有一个使用JPA(EclipseLink)和Spring框架的JavaEE应用程序。
在添加Spring事务管理之前,我的持久性类中一切都很好。我有以下实体(对应于数据库表):
>
项目
@Entity
@Table(name="projet")
public class Projet implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_projet", unique=true, nullable=false)
private Integer idProjet;
@Column(name="nom_projet")
private String nomProjet;
/** The projet util droits. */
@OneToMany(mappedBy="projet", cascade={CascadeType.ALL})
private Set<ProjetUtilDroit> projetUtilDroits;
public Projet() {
}
...
}
使用者
@Entity
@Table(name="utilisateur")
public class Utilisateur implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The id utilisateur. */
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_utilisateur", unique=true, nullable=false)
private Integer idUtilisateur;
/** The nom utilisateur. */
@Column(name="nom_utilisateur", nullable=false, length=50)
private String nomUtilisateur;
//bi-directional many-to-one association to ProjetUtilDroit
/** The projet util droits. */
@OneToMany(mappedBy="utilisateur", cascade={CascadeType.REMOVE})
private Set<ProjetUtilDroit> projetUtilDroits;
...
}
对吧
@Entity
@Table(name="droit")
public class Droit implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The id droit. */
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_droit", unique=true, nullable=false)
private Integer idDroit;
/** The type droit. */
@Column(name="type_droit", nullable=false, length=10)
private String typeDroit;
/**
* Instantiates a new droit.
*/
public Droit() {
}
...
}
以及将用户链接到具有特定权限的项目的关联(ProjectUserRight)
@Entity
@Table(name="projet_util_droit")
public class ProjetUtilDroit implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The id. */
@EmbeddedId
private ProjetUtilDroitPK id;
//bi-directional many-to-one association to Droit
/** The droit. */
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name="id_droit")
private Droit droit;
//bi-directional many-to-one association to Projet
/** The projet. */
@MapsId("idProjet")
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name="id_projet")
private Projet projet;
//bi-directional many-to-one association to Utilisateur
/** The utilisateur. */
@MapsId("idUtilisateur")
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name="id_utilisateur")
private Utilisateur utilisateur;
...
}
关联的嵌入id:
@Embeddable
public class ProjetUtilDroitPK implements Serializable {
//default serial version id, required for serializable classes.
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The id projet. */
@Column(name="id_projet", unique=true, nullable=false)
private Integer idProjet;
/** The id utilisateur. */
@Column(name="id_utilisateur", unique=true, nullable=false)
private Integer idUtilisateur;
...
}
我创建项目的方法及其权利:
public Projet createProject(String name, int idRight, int idUser) {
Projet project = new Projet();
project.setNomProjet(name);
ProjetUtilDroit pud = new ProjetUtilDroit();
Droit d = rightDao.findById(idRight);
pud.setDroit(d);
pud.setProjet(project);
Utilisateur user = userDao.findById(idUser);
pud.setUtilisateur(user);
if(user.getProjetUtilDroits() == null)
user.setProjetUtilDroits(new HashSet<ProjetUtilDroit>());
user.getProjetUtilDroits().add(pud);
Set<ProjetUtilDroit> pudSet = new HashSet<ProjetUtilDroit>();
pudSet.add(pud);
project.setProjetUtilDroits(pudSet);
project = projectDao.create(project);
return project;
}
它就像一个魅力(保持项目和相关的用户权限),直到我在“createProject”方法上方添加注释@Transactional。。。
我认为唯一的解决方案是在一个事务中创建项目,并在另一个事务中单独保存它的权利。这是唯一的解决办法吗?或者有人有其他建议吗?
哪个对象没有被持久化?包括完整的异常。
您需要将与对象的关系标记为级联持久化,或者在持久化项目之前对对象调用持久化。
我目前正在使用Java EE/Eclipselink和PostgreSQL开发一个web应用程序。关于我的实体,我特别管理“Project”、“User”和“Right”(读、写、删除等访问权限)。这些实体之间的关系是:一个项目可以有多个对该项目拥有不同权限的用户。因此,我得到了一个三重关联:Project+User+Right。 在这个协会坚持的过程中,我面临着一个恼人的问题。当我用它的信息持久
我对Spring注释和persist有一个误解。我使用的是Spring3.1,带有JPA和Hibernate。我认为persist意味着将实体添加到持久性上下文中(但在提交或刷新之前不要执行任何查询),而注释意味着用事务包装方法。 然而,在这个简短的例子中,当执行指针到达持久性时,它会失败并出现异常,因为name不能为null(db约束)。 如果我交换和,一切正常。然而,我不明白为什么反过来没有,
主要内容:1.事务核心类图,2.getTransaction 获取事务,3.commit 提交事务,4.rollback回滚事务1.事务核心类图 PlatformTransactionManager: 顶级核心接口, 定义了事务管理方法 AbstractPlatformTransactionManager: 实现了PlatformTransactionManager方法, 并定义了一些抽象方法, 子类扩展 DataSourceTransactionmanager: Jdbc单数据库事务管理器,
接口说明 如果用户想对比两个场景中的数据(如历史数据对比、规划前后的数据对比等)来统计一些信息,Wish3DEarth团队新增了双屏对比的接口,开发者可以通过该接口,来建立主屏与副屏之间的关联性。 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/contrasts/1.0.0/add 是否需要登录 是 请求字段说明 参数
主要内容:JPA级联持久化示例,输出结果级联持久化用于指定如果实体持久化,则其所有关联的子实体也将被持久化。 以下语法用于执行级联持久性操作 - JPA级联持久化示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步:
当向我的Maven-Java-project添加持久性时,我可以成功地构建和编译(Netbeans中的“清理和构建项目”,我假设它确实mvn站点)项目,但是我将无法在之后启动它(Netbeans中的“运行项目”)。 我已经尝试了一段时间而没有成功。例如,我试图删除pom中的组织.codehaus.mojo插件.xml尽管我的成功没有变化。 有人知道这个问题吗?我对MySQL数据库的设置有没有配置错