java hibernate 联合查询,Criteria在hibernate中连接查询复合主键

需要标准连接查询复合主键 . 实体:

ArtWork

@Entity

@Table(name = "artwork")

public class ArtWork implements io.malevich.web.entity.Entity {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Id

@Column(name = "language", columnDefinition = "CHAR(2)")

private String language;

@Column(name = "art_name", nullable = false)

private String artName;

@Column(name = "creation_date", nullable = false)

private Date creationDate;

@Column(name = "edition_flag", nullable = false, columnDefinition = "tinyint(1)")

private boolean editionFlag;

@Column(name = "replica_flag", nullable = false, columnDefinition = "tinyint(1)")

private boolean replicaFlag;

@Column(name = "number_of_editions")

private Long numberOfEditions;

@Column(name = "original_id")

private Long originalId;

@ManyToOne

@JoinColumns({

@JoinColumn(

name = "category_id",

referencedColumnName = "id", insertable = false, updatable = false),

@JoinColumn(

name = "language",

referencedColumnName = "language", insertable = false, updatable = false)

})

private Category category;

@ManyToOne

@JoinColumns({

@JoinColumn(

name = "gallery_id",

referencedColumnName = "id", insertable = false, updatable = false),

@JoinColumn(

name = "language",

referencedColumnName = "language", insertable = false, updatable = false)

})

private Gallery gallery;

@ManyToOne

private Specialization specialization;

@ManyToOne

@JoinColumns({

@JoinColumn(

name = "author_id",

referencedColumnName = "id", insertable = false, updatable = false),

@JoinColumn(

name = "language",

referencedColumnName = "language", insertable = false, updatable = false)

})

private Author author;

@Column

private String description;

@Column

private Double price;

//getter setter

}

用户:

@javax.persistence.Entity

@Table(name = "user")

public class User implements Entity, UserDetails {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Column(unique = true, length = 255, nullable = false)

private String name;

@Column(length = 255, nullable = false)

private String password;

@ElementCollection(fetch = FetchType.EAGER)

private Set roles = new HashSet<>();

@Column(name = "user_type_id")

private Long userTypeId;

@ManyToOne

@JoinColumn(name = "person_id", referencedColumnName = "id")

private Person person;

@ManyToOne

@JoinColumn(name = "organization_id", referencedColumnName = "id")

private Organization organization;

@ManyToOne

@JoinColumn(name = "file_id", referencedColumnName = "id")

private File file;

@Column(name = "activity_flag")

private boolean activityFlag;

//gettter and setter

}

账户国

@javax.persistence.Entity

@Table(name = "account_states")

public class AccountStates implements Entity {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Column(insertable = false, updatable = false)

private String language;

@ManyToOne

@JoinColumns({ @JoinColumn(name = "artwork_id", referencedColumnName = "id"),

@JoinColumn(name = "language", referencedColumnName = "language") })

private ArtWork artwork;

@ManyToOne

@JoinColumn(name = "art_owner_id", referencedColumnName = "id")

private User artOwner;

@Column(name = "quantity")

private Long quantity;

@Temporal(TemporalType.DATE)

@Column(name = "buy_date")

private Date buyDate;

}

帐户状态Dao:公共类JpaAccountStatesDao扩展JpaDao实现AccountStatesDao {

public JpaAccountStatesDao() {

super(AccountStates.class);

}

@Override

public AccountStates find(Long artOwnerId, Long artworkId, String language) {

final CriteriaBuilder builder = this.getEntityManager().getCriteriaBuilder();

final CriteriaQuery criteriaQuery = builder.createQuery(AccountStates.class);

Root root = criteriaQuery.from(AccountStates.class);

Predicate p1 = builder.and(builder.equal(root.get("artwork"), artworkId),

builder.equal(root.get("artwork"), language), builder.equal(root.get("artOwner"), artOwnerId));

criteriaQuery.where(p1);

TypedQuery typedQuery = this.getEntityManager().createQuery(criteriaQuery);

return typedQuery.getSingleResult();

}

}

我想找到其中artOwner id = 1且language = en且artwork id = 1的帐户状态 .

任何人都可以建议适当的查询相同?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值