Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@JoinFormula and @OneToMany definition - poor documentation

I have two questions concerning @JoinFormula and @OneToMany annotations:

  1. How can I limit the number of result with @JoinFormula and @OneToMany annotations?

  2. How can I define that id in expression author = id refers to Author.id?

    Author {      @Id     private Long id;      @OneToMany     @JoinFormula(value = "SELECT a FROM Article a WHERE author = id AND schedule < CURRENT_TIMESTAMP()") // limit = 15     private List<Article> pastArticles; } 

Like this, I keep having the pastArticles empty, even when I remove the schedule < part of the clause.

Thanks!

like image 762
Vojtěch Avatar asked Mar 31 '12 10:03

Vojtěch


People also ask

What is the difference between @joincolumn and @OneToMany annotation?

The @JoinColumn annotation defines the actual physical mapping on the owning side. On the other hand, the referencing side is defined using the mappedBy attribute of the @OneToMany annotation. As usual, the source code is available over on Github.

What is a one-to-many Association in database?

In a relational database system, a one-to-many association links two tables based on a Foreign Key column so that the child table record references the Primary Key of the parent table row.

What is the use of @OneToMany annotation in JPA?

For convenience, to take advantage of the entity state transitions and the dirty checking mechanism, many developers choose to map the child entities as a collection in the parent object, and, for this purpose, JPA offers the @OneToMany annotation.

Is it possible to map @OneToMany relationships with JPA?

While adding a @OneToMany relationship is very easy with JPA and Hibernate, knowing the right way to map such an association so that it generates very efficient SQL statements is definitely not a trivial thing to do.


1 Answers

Answer 1 :

@Size(max=10) private List<Comment> commentList; 

Answer 2 :(just example like that)

public class A{      @Id     @GeneratedValue     private Integer id;      private String uuid;      ...   } 

other class

public class B{       @Id        @GeneratedValue       private Integer id;        private String uuidOfA;      @ManyToOne   @JoinColumnsOrFormulas({   @JoinColumnOrFormula(formula=@JoinFormula(value="(SELECT a.id FROM A a WHERE a.uuid = uuid)", referencedColumnName="id")),   @JoinColumnOrFormula(column = @JoinColumn("uuidOfA", referencedColumnName="uuid")) })       private A a;       } 
like image 151
Jubin Patel Avatar answered Oct 18 '22 01:10

Jubin Patel