OneToOne | Uni directional | (Non Optional) - gauravsk89/hibernate GitHub Wiki
Scenario: OneToOne Uni-directional
In a Online auction/bidding system an item can sold by one user (one and only one user).
Data Modelling Perspective: Since a user can sell more than one item, so better to keep a FK in item table for seller as SELLER_ID.
Java Object Perspective: Item entity will have 2 references to User entity. One for buyer and another for seller.
Since association is uni-directional, User entity will not have any reference back to Item entity.
Entity classes:
@Entity @Table(name = "ITEMS") @Data @NoArgsConstructor @AllArgsConstructor @Builder @EqualsAndHashCode(of = {"itemId", "name"}, callSuper = false) @ToString public class Item {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ITEM_ID_SEQ")
@SequenceGenerator(name= "ITEM_ID_SEQ",
sequenceName="ITEM_ID_SEQ",
allocationSize = 1)
@Column(name = "ITEM_ID")
@JsonIgnore
private Long itemId;
@Column(name = "NAME")
private String name;
@Column(name = "INITIAL_AMOUNT")
private BigDecimal initialAmount;
@OneToOne
@JoinColumn(name = "SELLER_ID")
private User seller;
}
NO reference in User entity for Item entity.
Persistence logic
@Override @Transactional public Item createItem(ItemDTO itemDto) {
User seller = userRepository.findById(itemDto.getSellerId());
Item item = Item.builder()
.name(itemDto.getName())
.initialAmount(itemDto.getInitialAmount())
.seller(seller)
.build();
itemsRepository.save(item);
return item;
}