Utilisation de Play! framework et sa classe JPASupport J'ai rencontré un problème avec une base de données existante.Mapper la colonne null en tant que 0 dans une base de données héritée (JPA)
J'ai la classe suivante:
@Entity
@Table(name="product_catalog")
public class ProductCatalog extends JPASupport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer product_catalog;
@OneToOne
@JoinColumn(name="upper_catalog")
public ProductCatalog upper_catalog;
public String name;
}
Certains catalogues de produits n'ont pas un catalogue supérieur, ce qui est référencé comme 0 dans une base de données existante. Si je fournis le fichier upper_catalog comme NULL, alors JPA insère une valeur NULL dans cette colonne de base de données. Comment puis-je forcer les valeurs NULL à être 0 lors de l'écriture dans la base de données et l'inverse lors de la lecture de la base de données?
Merci, cela fonctionne parfaitement! Juste dû changer le long à l'entier (une certaine configuration de jeu!). Quelle est la signification de @Transient dans ce cas - je n'ai pas ajouté cela et tous mes tests pour cette classe semblent bien se passer. – Indrek
@Transient est compris par le fournisseur JPA comme: "ne gère pas ce champ (ne le sauvegarde pas dans la base de données))". J'ai oublié ça avec le jeu! @Transient est seulement nécessaire sur les champs. J'ai utilisé Long parce que c'est le jeu par défaut! tapez pour id, mais utilisez ce que vous voulez – Thierry
Je viens de relire le code, et vous devriez faire attention à appeler le setter seulement avec ProductCatalog persistant (avec un id) sinon cela ne fonctionnera pas. (Perhap vous devez ajouter ce test au début de la méthode: si pc.id est nul, persister pc). – Thierry