gpt4 book ai didi

java - 对 transient 集合字段的 Hibernate 注释

转载 作者:行者123 更新时间:2023-11-29 08:59:25 26 4
gpt4 key购买 nike

我想要一个集合字段使用查询,但我找不到实现它的方法。有一个 @Formula 注释,但这不适用于集合。您可能会问为什么我不使用 @ManyToMany 或类似的注释。问题是,我有一个表(例如,称为关系),其中包含与此类似的列:

编号 |子类型 | child ID | parent 类型 |父 ID |

现在,ChildType 和 ParentType 可以是我的应用程序中的许多类之一,因此我不能(我不想)使用 @ManyToMany 映射,因为它会为每个创建另一个表类(class)。我想要的是,在类 A 中有一个称为关系的集合字段,它会从关系表中选择所有行(关系),其中 ChildID = A.id 和 ChildType = 'A'。这可能吗?

更新: 看来我还不够清楚。好的,比如说,我有一个类 Relationship,其中 ParentTypeChildType 只是作为字符串的父类和子类的类名:

@Entity
public class Relationship {
@Id
@GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
private ParentType parentType;
private Long parentId;
@Enumerated(EnumType.STRING)
private ParentType childType;
private Long childId;
}

然后我有各种具有字段relationships的类,比如:

@Entity
public class A {
@Id
@GeneratedValue
private Long id;
private Set<Relationship> relationships = new HashSet<Relationship>();
}

@Entity
public class B {
@Id
@GeneratedValue
private Long id;
private Set<Relationship> relationships = new HashSet<Relationship>();
}

@Entity
public class C {
@Id
@GeneratedValue
private Long id;
private Set<Relationship> relationships = new HashSet<Relationship>();
}

现在我希望 Hibernate 查询 Relationships 表以查找每个类 ABC 的关系 每当我得到相应类的实例 bean 时。像这样:

@Query("(select relationship from Relationship relationship where relationship.childId = id and relationship.childType = 'A')")
private Set<Relationship> relationships = new ArrayList<Relationship>();

最佳答案

考虑到 relation_ship 是你的关系表,上面描述的表是 parent_child

       SQLQuery query = session.createSQLQuery(
"SELECT r
FROM relation_ship r
INNER JOIN
parent_child p
ON r.id = p.ChildID and
p.ChildType := ChildType").setParameter("ChildType","A");

List<Relationship> = query.list();

关于java - 对 transient 集合字段的 Hibernate 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454223/

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