79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						||
aliases:
 | 
						||
  - JPA
 | 
						||
---
 | 
						||
up:: [[EJB entity bean]]
 | 
						||
#s/informatique/langage/java 
 | 
						||
 | 
						||
Annotations java qui permettent de créer facilement des [[EJB entity bean|entity beans]] 
 | 
						||
 | 
						||
Documentation : http://www.objectdb.com/api/java/jpa
 | 
						||
 | 
						||
 | 
						||
# Exemples 
 | 
						||
 | 
						||
```java
 | 
						||
@Entity
 | 
						||
public class Book {
 | 
						||
    @Id
 | 
						||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
						||
    private Long id;
 | 
						||
    @Column(name = "book_title", nullable = false, updatable = false) private String title;
 | 
						||
    private Float price;
 | 
						||
    @Column(length = 2000)
 | 
						||
    private String description;
 | 
						||
    private String isbn;
 | 
						||
    @Column(name = "nb_of_page", nullable = false)
 | 
						||
    private Integer nbOfPage;
 | 
						||
    private Boolean illustrations;
 | 
						||
    @Basic(fetch = FetchType.LAZY)
 | 
						||
    @Lob
 | 
						||
    private byte[] audioText;
 | 
						||
 | 
						||
    // Constructors, getters, setters ...
 | 
						||
}
 | 
						||
```
 | 
						||
 | 
						||
- `@Column` : préférences pour les colonnes (de la BDD)
 | 
						||
    - `name, unique, nullable, insertable, updatable, table, length, precision, scale...`
 | 
						||
- `@GeneratedValue` : stratégie de génération automatique des clefs primaires
 | 
						||
    - stratégie recommandée : `GenerationType.auto`
 | 
						||
- `@Lob` : "Large object" (notamment pour les BLOB : Binary Large OBject)
 | 
						||
    - Souvent utilisé avec `@Basic(fetch = FetchType.LAZY)` indiquer un chargement lazy (seulement au moment du get de cet attribut).
 | 
						||
 | 
						||
## Colonnes composites
 | 
						||
```java
 | 
						||
@Embeddable
 | 
						||
public class Address {
 | 
						||
    protected String street;
 | 
						||
    protected String city;
 | 
						||
    protected String state;
 | 
						||
    @Embedded
 | 
						||
    Zipcode zipcode;
 | 
						||
}
 | 
						||
 | 
						||
@Embeddable
 | 
						||
public class Zipcode {
 | 
						||
    String zip;
 | 
						||
    protected String plusFour;
 | 
						||
}
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
## Clef primaire composite
 | 
						||
```java
 | 
						||
@Embeddable 
 | 
						||
public class CompositeId {
 | 
						||
    String name;
 | 
						||
    String email;
 | 
						||
}
 | 
						||
 | 
						||
@Entity 
 | 
						||
public class Dependent {
 | 
						||
    @EmbeddedId  // indique que la clef primaire est dans une autre classe
 | 
						||
    CompositeId id;
 | 
						||
 | 
						||
    @ManyToOne
 | 
						||
    Employee emp;
 | 
						||
}
 | 
						||
``` |