Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA: query to get results based on value of foreign key defined in the entity class?

Tags:

java

jpa

entity

Netbean 6.9 generated the following JPA entity class from this SQL Server 2008 table: alt text

I want to get all the ProductDescriptors that have a specific SKU value. Something like this:

SELECT * FROM ProductDescriptors WHERE SKU='something'

Given the entity class, what's the Java code to get the results?

Thanks.

@Entity
@Table(name = "ProductDescriptors")
@NamedQueries({
    @NamedQuery(name = "ProductDescriptors.findAll",     query = "SELECT p FROM ProductDescriptors p"),
    @NamedQuery(name = "ProductDescriptors.findByDescriptorID", query = "SELECT p FROM ProductDescriptors p WHERE p.descriptorID = :descriptorID"),
    @NamedQuery(name = "ProductDescriptors.findByLanguageCode", query = "SELECT p FROM ProductDescriptors p WHERE p.languageCode = :languageCode"),
    @NamedQuery(name = "ProductDescriptors.findByTitle", query = "SELECT p FROM ProductDescriptors p WHERE p.title = :title"),
    @NamedQuery(name = "ProductDescriptors.findByIsDefault", query = "SELECT p FROM ProductDescriptors p WHERE p.isDefault = :isDefault"),
    @NamedQuery(name = "ProductDescriptors.findByBody", query = "SELECT p FROM ProductDescriptors p WHERE p.body = :body")})
public class ProductDescriptors implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "DescriptorID")
    private Integer descriptorID;
    @Basic(optional = false)
    @Column(name = "LanguageCode")
    private String languageCode;
    @Basic(optional = false)
    @Column(name = "Title")
    private String title;
    @Basic(optional = false)
    @Column(name = "IsDefault")
    private boolean isDefault;
    @Basic(optional = false)
    @Column(name = "Body")
    private String body;
    @JoinColumn(name = "SKU", referencedColumnName = "SKU")
    @ManyToOne(optional = false)
    private Products products;

...

like image 236
Sajee Avatar asked Nov 14 '10 22:11

Sajee


1 Answers

Something like this:

@PersistenceContext( unitName = "youPersistenceUnitHere" )
private EntityManager _entityManager;

public List<ProductDescriptors> getProductDescriptorsBySku( String sku ) {
   Query query = _entityManager.createQuery( "Select ProductDescriptors from ProductDescriptors pd where pd.products.sku = ?1" );
   query.setParameter( 1, sku );
   return new ArrayList<ProductDescriptors>( query.getResultList() );
}
like image 127
javamonkey79 Avatar answered Oct 17 '22 11:10

javamonkey79