【问题标题】:JPA: query to get results based on value of foreign key defined in the entity class?JPA:查询以根据实体类中定义的外键值获取结果?
【发布时间】:2011-05-09 23:16:34
【问题描述】:

Netbean 6.9 从此 SQL Server 2008 表生成以下 JPA 实体类:

我想获取所有具有特定 SKU 值的 ProductDescriptor。像这样的:

SELECT * FROM ProductDescriptors WHERE SKU='something'

给定实体类,获取结果的 Java 代码是什么?

谢谢。

@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;

...

【问题讨论】:

    标签: java jpa entity


    【解决方案1】:

    类似这样的:

    @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() );
    }
    

    【讨论】:

    • 好的,我在那里添加了一个解决方案。正如我在那里评论的那样,我不知道您需要涉及 products 表\实体集;所以我把它留了下来。如果你这样做,请发表评论,我会再看一遍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2020-09-26
    • 2011-06-16
    • 2021-02-13
    相关资源
    最近更新 更多