gpt4 book ai didi

hibernate - 使用 ClassMetadata 确定 ManyToMany 与 OneToMany

转载 作者:行者123 更新时间:2023-12-03 07:59:38 29 4
gpt4 key购买 nike

我正在使用 ClassMetadata 来确定 hibernate POJO 的结构。

我需要确定一个集合是 OneToMany 还是 ManyToMany。这些信息在哪里?我可以在不使用反射的情况下得到它吗?请参阅下面的代码。


//Get the class' metadata
ClassMetadata cmd=sf.getClassMetadata(o.getClass());

for(String propertyName:cmd.getPropertyNames()){
if (cmd.getPropertyType(propertyName).isCollectionType() && cmd.??()) //Do something with @ManyToMany collections.
}

我所需要的只是告诉我它是否是 ManyTo____ 关系的方法。我看到了 getPropertyLaziness(),但这并不总是保证集合的类型。有什么想法吗?

最佳答案

不幸的是,事情并没有那么简单。最好的检测方法是检查特定的 CollectionPersister 实现:

SessionFactory sf = ...;

// Get the class' metadata
ClassMetadata cmd = sf.getClassMetadata(o.getClass());

for(String propertyName:cmd.getPropertyNames()) {
Type propertyType = cmd.getPropertyType(propertyName);
if (propertyType.isCollectionType()) {
CollectionType collType = (CollectionType) propertyType;

// obtain collection persister
CollectionPersister persister = ((SessionFactoryImplementor) sf)
.getCollectionPersister(collType.getRole());

if (persister instanceof OneToManyPersister) {
// this is one-to-many
} else {
// this is many-to-many OR collection of elements
}
} // if
} // for

关于hibernate - 使用 ClassMetadata 确定 ManyToMany 与 OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374748/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com