mas*_*y88 5 java tree recursion annotations hibernate
我想用JPA/hibernate创建动态和通用的超类,它将扩展为每个分层结构化模型,如:角色,页面,目录,部门,权限,树.我想使用递归和java反射创建这个对象动态树
它应该是这样的:
该实体应该引用自身实体.
我希望它是完全抽象的,没有数据库表.只有extendet enities应该有db.
我试图实现这个目标.但失败了这么久.这是关于它的帖子
我考虑解决方案:
我希望有人会提出一些建议.
我想出了以下设计。您还可以在GitHub上查看:
@MappedSuperclass
public abstract class GenericHierarchicalDictionary {
public abstract GenericHierarchicalDictionary getParent();
public abstract Set<? extends GenericHierarchicalDictionary> getChildren();
}
@Entity
@Table(name = "LocalFolder")
public class LocalFolder extends GenericHierarchicalDictionary {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
private LocalFolder parent;
@OneToMany(mappedBy = "parent")
private Set<LocalFolder> children = new HashSet<LocalFolder>();
@Override
public LocalFolder getParent() {
return parent;
}
@Override
public Set<LocalFolder> getChildren() {
return children;
}
public void addChild(LocalFolder localFolder) {
localFolder.parent = this;
children.add(localFolder);
}
}
@Entity
@Table(name = "RemoteFolder")
public class RemoteFolder extends GenericHierarchicalDictionary {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
private RemoteFolder parent;
@OneToMany(mappedBy = "parent")
private Set<RemoteFolder> children = new HashSet<RemoteFolder>();
@Override
public RemoteFolder getParent() {
return parent;
}
@Override
public Set<RemoteFolder> getChildren() {
return children;
}
public void addChild(RemoteFolder localFolder) {
localFolder.parent = this;
children.add(localFolder);
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试:
@Test
public void testTree() {
LOGGER.debug("testAddWebResource");
doInTransaction(new TransactionCallable<Void>() {
@Override
public Void execute(Session session) {
LocalFolder rootLocalFolder = new LocalFolder();
session.persist(rootLocalFolder);
LocalFolder localFolder1 = new LocalFolder();
rootLocalFolder.addChild(localFolder1);
session.persist(localFolder1);
LocalFolder localFolder11 = new LocalFolder();
localFolder1.addChild(localFolder11);
session.persist(localFolder11);
RemoteFolder rootRemoteFolder = new RemoteFolder();
session.persist(rootRemoteFolder);
RemoteFolder remoteFolder1 = new RemoteFolder();
rootRemoteFolder.addChild(remoteFolder1);
session.persist(remoteFolder1);
RemoteFolder remoteFolder11 = new RemoteFolder();
remoteFolder1.addChild(remoteFolder11);
session.persist(remoteFolder11);
return null;
}
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1922 次 |
最近记录: |