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;

}