以一对多关系(国家/地区->)为例.
国家(反面):
@OneToMany(mappedBy = "country", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<StateTable> stateTableList=new ArrayList<StateTable>(0);
Run Code Online (Sandbox Code Playgroud)
StateTable(拥有方):
@JoinColumn(name = "country_id", referencedColumnName = "country_id")
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private Country country;
Run Code Online (Sandbox Code Playgroud)
尝试更新StateTable活动数据库事务(JTA或资源本地)中的提供(分离)实体的方法:
public StateTable update(StateTable stateTable) {
// Getting the original state entity from the database.
StateTable oldState = entityManager.find(StateTable.class, stateTable.getStateId());
// Get hold of the original country (with countryId = 67, for example).
Country oldCountry = oldState.getCountry();
// Getting …Run Code Online (Sandbox Code Playgroud) 我想到的场景是:Service Bus用于实例到实例的通信,因此Subscription对每个服务实例都是唯一的.最终结果是,如果实例未正常关闭,则其订阅不会被删除.
当服务实例"死"并重新启动时,订阅的先前内容是不相关的并且可以被丢弃.
那么,有没有办法为Service Bus订阅设置"生存时间"或模拟类似的东西,而不必诉诸一些自定义的孤立检测机制?
重要提示:如果您正在阅读本文,请考虑深入讨论这篇文章.
这是一种很常见的做法/情况/要求,父母的子女可能会迁移到另一方父母.如果orphanRemoval设置true在这种关系的反面,会发生什么?
以一个例子为例,任何简单的一对多关系如下.
反面(部门):
@OneToMany(mappedBy = "department", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Employee> employeeList = new ArrayList<Employee>(0);
Run Code Online (Sandbox Code Playgroud)
拥有方(员工):
@JoinColumn(name = "department_id", referencedColumnName = "department_id")
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private Department department;
Run Code Online (Sandbox Code Playgroud)
合并如下所示的操作/操作(其中department是客户端提供的分离实体),
Employee employee = entityManager.find(Employee.class, 1L);
Department newDepartment = entityManager.contains(department) ? department : entityManager.merge(department);
if (!newDepartment.equals(employee.getDepartment())) {
employee.getDepartment().getEmployeeList().remove(employee);
// Since orphanRemoval is set to true,
// this should cause a …Run Code Online (Sandbox Code Playgroud) 我使用以下命令在本地存储库上创建一个孤立分支,然后将其推送到 Github 上的远程:
git checkout --orphan worker
git rm -rf .
git commit --allow-empty -m "Initial orphan commit"
git push origin worker
Run Code Online (Sandbox Code Playgroud)
我在 GitHub 上的工作分支上收到“此分支提前 1 次提交,在 master 后面提交 n 次”消息。
这里的想法是创建一个空的、不相关的 分支,没有历史记录,与所有其他分支和提交完全断开连接,并且不会相对于主分支进行跟踪。
嗨,我有一个项目,每个项目都有任务.任务属于项目.在删除项目之前,我想检查是否有相关任务.如果有任务我不想删除项目.如果没有关联任务,则应删除该项目.你能帮我解释一下代码吗?我错过了什么?
class Project < ActiveRecord::Base
before_destroy :check_tasks
def check_tasks
if Project.find(params[:id]).tasks
flash[:notice] = 'This project has tasks.'
redirect_to :action => 'list_projects'
end
end
end
Run Code Online (Sandbox Code Playgroud) 我有两个模型 - 照片和标签 - 通过ManyToManyField连接.
class Photo(models.Model):
tags = models.ManyToManyField(Tag)
class Tag(models.Model):
lang = models.CharField(max_length=2)
name_es = models.CharField(max_length=40)
name_en = models.CharField(max_length=40)
Run Code Online (Sandbox Code Playgroud)
每隔一段时间,我们就会获得孤立的标签,任何照片都不会引用这些标签.是否有一种删除这些标签的有效方法?我知道这个答案: Django:删除M2M孤儿条目?
我们的解决方案目前看起来像这样:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
Run Code Online (Sandbox Code Playgroud)
然而,随着数据库,该脚本的运行变得令人不安的高:-P有正从标签表中的所有标签ID的列表的有效方式,然后从所有的标签ID的列表许多一对多表创建一个交集列表?
我有一个git存储库,我已经做了一些测试,我想将它包含在主存储库中.
我想将它添加为孤立分支,因为我想保留它,但我不想让我的测试项目膨胀master分支.
如何将git存储库导入为孤立的brach?我想保留我的提交.
编辑以显示它不是重复:我实际上并不关心它是孤立的还是类似的东西,我只是想有办法合并2个存储库.给出的答案是正确的,并解决了我的问题.
我有一个由另一个人生成的孤立提交,我在 GitHub GUI 中看到了它。由于路径上没有包含此提交的分支/标签,因此无法通过克隆存储库来访问此提交。假设提交的作者已经删除了他的本地存储库,我希望直接在 GitHub 中为这个提交分配一个分支/标签。
只需使用我可以使用的直接链接即可看到此提交,因为它的 git hash 是已知的。但是,在Insights>Network中看不到提交。
如何从 GitHub 中的此提交页面为提交分配标签?是否可以直接从此页面创建新分支?有什么其他方法可以将此提交返回到服务中?
我正在使用JPA 2.0,Hibernate 4.1.0.Final,Spring 3.1.1.RELEASE和Java 1.6.我有这个实体与另一个实体的一对多关系......
import javax.persistence.CascadeType;
...
@Entity
@Table(name = "classroom")
public class Classroom implements Serializable
{
...
@OneToMany(mappedBy = "classroom", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private Set<ClassroomUser> roster;
Run Code Online (Sandbox Code Playgroud)
但是,当我使用一组不同的ClassroomUser对象更新我的实体时
classroom.setRoster(newRoster);
Run Code Online (Sandbox Code Playgroud)
并保存实体,保留所有以前的ClassroomUser对象.在从数据库中删除所有孤立记录时更新我的实体的正确/最短方法是什么?
谢谢, - 戴夫
git ×3
hibernate ×3
jpa ×3
orphan ×3
github ×2
azure ×1
django ×1
eclipselink ×1
many-to-many ×1
servicebus ×1
spring ×1