- Home
- Products
- Integration
- Tutorial
- Barcode FAQ
- Purchase
- Company
Property-based unidirectional one-to-one relationship in Java
Listing 7.6 Property-based unidirectional one-to-one relationship Encode Data Matrix In Java Using Barcode maker for Java Control to generate, create DataMatrix image in Java applications. www.OnBarcode.comData Matrix ECC200 Decoder In Java Using Barcode recognizer for Java Control to read, scan read, scan image in Java applications. www.OnBarcode.com@Entity public class User { private Long userId; private String email; private BillingInfo billing; One-to-one relationship ... using properties @OneToOne public BillingInfo getBilling() { this.billing; } public void setBilling(BillingInfo billing) { this.billing = billing; } } @Entity public class BillingInfo { private Long billingId; private String creditCardType; ... } Generate Barcode In Java Using Barcode printer for Java Control to generate, create Barcode image in Java applications. www.OnBarcode.comCode 3/9 Printer In Java Using Barcode encoder for Java Control to generate, create Code 39 image in Java applications. www.OnBarcode.comEntity relationships
Print Barcode In Java Using Barcode creation for Java Control to generate, create Barcode image in Java applications. www.OnBarcode.comPaint Barcode In Java Using Barcode printer for Java Control to generate, create Barcode image in Java applications. www.OnBarcode.comThe optional element tells the persistence provider if the related object must always be present. By default, this is set to true, which means that a corresponding related object need not exist for the entity to exist. In our case, not every user always has billing information (for example if the user just signed up), so the relationship is optional and the billing field can sometimes be null. If the optional parameter is set to false, the entity cannot exist if the relationship or association does not hold. In other words, no User without BillingInfo could ever exist. You ll see the mappedBy parameter in action in the next section when we discuss bidirectional associations. Bidirectional one-to-one The real point of having domain relationships between entities is to be able to reach one entity from another. In our previous example, we can easily reach the billing information through the billingInfo reference when we have an instance of a User. In some cases, you need to be able to access related entities from either side of the relationship (admittedly, this is rare for one-to-one relationships). For example, the ActionBazaar application may periodically check for credit card expiration dates and notify users of imminently expiring credit cards. As a result, the application should be able to access user information from a given BillingInfo entity and the User-BillingInfo relationship should really be bidirectional. In effect, bidirectional one-to-one relationships are implemented using two @OneToOne annotations pointing to each other on either side of the bidirectional relationship. Let s see how this works in listing 7.7 by refactoring the code from listing 7.5. Paint Matrix In Java Using Barcode encoder for Java Control to generate, create Matrix Barcode image in Java applications. www.OnBarcode.comGenerate ISSN - 13 In Java Using Barcode maker for Java Control to generate, create International Standard Serial Number image in Java applications. www.OnBarcode.comListing 7.7 Bidirectional one-to-one relationship
Data Matrix 2d Barcode Creator In None Using Barcode generator for Font Control to generate, create Data Matrix ECC200 image in Font applications. www.OnBarcode.comGenerating Data Matrix In Java Using Barcode generator for Java Control to generate, create Data Matrix 2d barcode image in Java applications. www.OnBarcode.com@Entity public class User { @Id protected String userId; protected String email; @OneToOne protected BillingInfo billingInfo; } @Entity public class BillingInfo { @Id protected Long billingId; protected String creditCardType; .. QR Code JIS X 0510 Decoder In .NET Framework Using Barcode decoder for .NET framework Control to read, scan read, scan image in .NET framework applications. www.OnBarcode.comCode 128A Drawer In Objective-C Using Barcode generator for iPad Control to generate, create Code 128 Code Set A image in iPad applications. www.OnBarcode.comOne-to-one relationship
Printing UCC - 12 In Objective-C Using Barcode maker for iPad Control to generate, create EAN / UCC - 14 image in iPad applications. www.OnBarcode.comCode 128B Printer In Objective-C Using Barcode generation for iPhone Control to generate, create USS Code 128 image in iPhone applications. www.OnBarcode.comImplementing domain models
Creating Code 128 Code Set B In .NET Framework Using Barcode drawer for ASP.NET Control to generate, create Code 128A image in ASP.NET applications. www.OnBarcode.comDraw Barcode In VB.NET Using Barcode maker for .NET framework Control to generate, create Barcode image in VS .NET applications. www.OnBarcode.comprotected String routingNumber; @OneToOne(mappedBy="billingInfo", optional="false"); protected User user; } PDF 417 Printer In Java Using Barcode printer for BIRT Control to generate, create PDF-417 2d barcode image in BIRT applications. www.OnBarcode.comScan Code-128 In Java Using Barcode decoder for Java Control to read, scan read, scan image in Java applications. www.OnBarcode.comReciprocal relationship to User
Print GS1 - 12 In .NET Using Barcode creator for VS .NET Control to generate, create UPCA image in VS .NET applications. www.OnBarcode.comMatrix 2D Barcode Creation In .NET Using Barcode maker for Visual Studio .NET Control to generate, create Matrix image in Visual Studio .NET applications. www.OnBarcode.comIn listing 7.7, the User class still has a relationship to the BillingInfo class through the billingInfo variable b. However, in this case the relationship is bidirectional because the BillingInfo class also has a reference to the User class through the user field C. The @OneToOne annotation on the user field has two more interesting things going on. The first is the mappedBy="billingInfo" specification C. This tells the container that the owning side of the relationship exists in the User class s billingInfo instance variable. The concept of a relationship owner doesn t originate from domain modeling. It exists as a convenience to define the database mapping for a relationship only once instead of repeating the same mapping for both directions of a relationship. You ll see this concept in action in chapter 8 when we describe O/R mapping. For now, simply note the role of the mappedBy attribute. The second interesting feature of the @OneToOne annotation on the user field is that the optional parameter is set to false this time. This means that a BillingInfo object cannot exist without a related User object. After all, why bother storing credit card or bank account information that is not related to an existing user 7.3.2 @OneToMany and @ManyToOne As you might have gathered from the ActionBazaar domain model in figure 7.3, one-to-many and many-to-one relationships are the most common in enterprise systems. In this type of relationship, one entity will have two or more references of another. In the Java world, this usually means that an entity has a collection-type field such as java.util.Set or java.util.List storing multiple instances of another entity. Also, if the association between two entities is bidirectional, one side of the association is one-to-many and the opposite side of the association is many-to-one. In figure 7.6, the relationship between Bid and Item is one-to-many from the perspective of the Item object, while it is many-to-one from the perspective of Figure 7.6 Every Item has one or more Bids where more than one Bid may be placed on an Item. Therefore, the relationship between Item and Bid is one-to-many whereas the relationship between Bid and Item is many-to-one.
|
|