Home > Software engineering >  How can I pass an entity as a attribute to another entity?
How can I pass an entity as a attribute to another entity?

Time:01-30

I'm studying spring boot PostgreSQL and I have a question.

I have a class which is an entity, it's called order and creates a table in PostgreSQL, it has three attributes: private long orderid, private String productname and private Seller seller;

The last one, Seller is another class/entity, it has the attributes sellername and productcode, how can I pass this class Seller to my class Order? I want to do that in order to create a table in PostgreSQL.

@Entity
@Table(name ="order")

public class Order implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderid;
    
    @Column(name="productname")
    private String product name;

    **Here is where I want to put the class Seller**
}

@Entity
@Table(name="seller")
public class Seller implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name="productcode")
    private String productcode;
    @Column(name="sellername")
    private String sellername;

CodePudding user response:

Whenever there is need for nested structure in Postgresql , we create type.

Step 1: Create type Seller:

postgres=# create type seller as (sellername varchar(20),productcode int);
CREATE TYPE

Step 2: Create table Order ( table name ORDER is under double-quote because order is a keyword in postgresql):

postgres=# create table "order"(orderid bigint,productname varchar(20),seller seller);
CREATE TABLE
postgres=# \d "order"
                         Table "public.order"
   Column    |         Type          | Collation | Nullable | Default
------------- ----------------------- ----------- ---------- ---------
 orderid     | bigint                |           |          |
 productname | character varying(20) |           |          |
 seller      | seller                |           |

Step 3: Insert and verify values:

postgres=# insert into "order"  values(1,'laptop',('roger',10));
INSERT 0 1
postgres=# select * from "order";
 orderid | productname |   seller
--------- ------------- ------------
       1 | laptop      | (roger,10)
(1 row)

Step 4: Querying composite type:

postgres=# select * from "order";
 orderid | productname |   seller
--------- ------------- ------------
       1 | laptop      | (roger,10)
(1 row)

postgres=# select seller from "order" where orderid=1;
   seller
------------
 (roger,10)
(1 row)

postgres=# select to_json(seller)  from "order" where orderid=1;
                 to_json
-----------------------------------------
 {"sellername":"roger","productcode":10}
(1 row)


postgres=# select to_json(seller)->>'sellername'  from "order" where orderid=1;
 ?column?
----------
 roger
(1 row)

postgres=# select to_json(seller)->>'productcode'  from "order" where orderid=1;
 ?column?
----------
 10
(1 row)

CodePudding user response:

I think you need to have relationship @OneToMany for saller -> order and @ManyToOne order -> saler. In this case will be like this.

 @Entity
 @Table(name ="order")
 public class Order implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderid;
    
    @Column(name="productname")
    private String product name;
    
    @ManyToOne
    @JoinColumn(name = "seller_id)
    private Seller seller;
}

@Entity
@Table(name="seller")
public class Seller implements Serializable {
        
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name="productcode")
    private String productcode;
    @Column(name="sellername")
    private String sellername;
    
    @OneToMany(mappedBy = "seller")
    private List<Order> orders;
}

In this case you will have the right relationship, so One seller can have many orders.

  •  Tags:  
  • Related