2011-05-19 76 views
0


我想知道如何在Hibernate上建立n:3关系。我看过很多使用注释@ManyToMany,@OneToMany ..等的例子,但它们都不是n:x,x是自然数。
你能给我一个简单的例子吗?在此先感谢关系n:3休眠

+0

能否提供一些实际示例的更多详细信息?三个被引用的对象是相同的角色,还是他们有不同的角色?第一种情况你可能需要使用ManyToMany,第二种情况你可以使用三个独立的OneToMany关系。 – 2011-05-19 10:13:37

回答

1

您可以使用验证器。我认为你的需求不能被视为数据库设计问题,而是一个验证问题。改用验证器。您可以编写自定义的bean验证(JSR-303),它验证元素的列表计数:

public class MyListSizeValidator implements 
     ConstraintValidator<MyListConstraintAnnotation, List<?> /* list of any type */ > { 

    public void initialize(MyListConstraintAnnotation myannotation) { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    public boolean isValid(List<?> mylist, ConstraintValidatorContext constraintValidatorContext) { 
     return mylist.size() < 4; 
    } 
} 

@Documented 
@Constraint(validatedBy = MyListSizeValidator.class) 
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyListConstraintAnnotation { 
    String message() default "List is full!"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 
} 

用法是这样的:

class MyCronBean { 
    @NotNull 
    @MyListConstraintAnnotation 
    private List<MyObject> list; 
    /** setters and getters */ 
} 

UPDATE: 你可以使用JSR -303在Maven中实现“休眠验证器”:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.0.2.GA</version> 
</dependency> 
+0

我需要导入哪些依赖项才能获得这些注释? – 2011-05-19 07:59:47

+0

我的帖子更新了依赖。使用hibernate验证器。 – 2011-05-19 08:02:33

+0

谢谢,也许为了让它更加灵活,我将在更高的层次上缩小这种关系,并将这个关系保留为n:m。无论如何,很好的了解验证器。非常感谢 – 2011-05-19 08:47:05

0

如果你不谈论Ternary associations(m:n:1),那么你需要使用@ManyToMany。

+0

有没有可能缩小关系?我怎样才能建模?感谢您回答 – 2011-05-19 07:52:44

+0

我不是在谈论三元关联。我需要A * ---- 3 B,A,B是实体 – 2011-05-19 07:53:53

+0

Blanca Hdez:n:3关系只是一个m:n(由@ManyToMany完成)和一些额外的逻辑。 - 你需要自己实现这个addtionl逻辑。 – Ralph 2011-05-19 07:55:16