2014-10-13 3 views
0

В любом случае, я могу иметь эффект @ElementCollection без фактической аннотации? Я использую Hibernate 3.3, а @ElementCollection и @CollectionTable поддерживается только для Hibernate 3.5 и выше. Но мне действительно нужно использовать эти аннотации, для случая, как это:Репликация поведения @ElementCollection

http://www.concretepage.com/hibernate/elementcollection_hibernate_annotation (Где мы получаем список строк, а не список полного лица)

+0

вы имеете в виду положить его в "orm.xml" вместо аннотации? –

+0

Аннотации все еще не используются, но без этих двух отдельных аннотаций – James

ответ

0

Вы можете использовать <element> тег сделать такую ​​же операцию, обратитесь к этой ссылке из спящего режима документации:

7.2.3. Collections of basic types and embeddable objects

пример, приведенный в ссылке это:

<element 
     column="column_name"        (1) 
     formula="any SQL expression"      (2) 
     type="typename"         (3) 
     length="L" 
     precision="P" 
     scale="S" 
     not-null="true|false" 
     unique="true|false" 
     node="element-name" 
/> 

1 column (optional): the name of the column holding the collection element values. 
2 formula (optional): an SQL formula used to evaluate the element. 
3 type (required): the type of the collection element. 

Обратитесь к этой ссылке для примера: Collection Mapping

Star.java

private Set<String> planets = new HashSet<String>(); 

Star.hbm.xml

<set name="planets" table="star_planet"> 
    <key column="star_id" /> 
    <element type="text"/> 
</set> 

Обновление:

Вы должны использовать либо xml-сопоставление, либо аннотации для данного класса сущностей, но не оба одновременно.

Если вы хотите увидеть примеры только с помощью аннотаций, тогда есть много доступных, если вы будете искать в Google, пожалуйста, проверьте и сообщите мне, есть ли у вас проблемы с их внедрением.

Наконец, да он работает с множеством строк, целых или Long и т.д.

Update:

Вот простой пример, который показывает, как использовать коллекции элементов:

пользователя .java

import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Set; 

import javax.persistence.AttributeOverride; 
import javax.persistence.AttributeOverrides; 
import javax.persistence.CollectionTable; 
import javax.persistence.Column; 
import javax.persistence.ElementCollection; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.Table; 

@Entity 
@Table(name = "TB_User") 
public class User { 
    @Id 
    @GeneratedValue 
    private int id; 
    private String name; 

    @ElementCollection 
    @CollectionTable(name = "Addresses", joinColumns = @JoinColumn(name = "user_id")) 
    @AttributeOverrides({ @AttributeOverride(name = "street1", column = @Column(name = "fld_street")) }) 
    public Set<Address> addresses = new HashSet<Address>(); 

    public User() { 
    } 

    public User(String name, Address... addresses){ 
     this.name = name; 
     this.addresses.addAll(Arrays.asList(addresses)); 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Set<Address> getAddresses() { 
     return addresses; 
    } 

    public void setAddresses(Set<Address> addresses) { 
     this.addresses = addresses; 
    } 
} 

Address.java

import javax.persistence.Embeddable; 

@Embeddable 
public class Address { 
    private String street1; 

    public Address() { 
    } 

    public Address(String street1) { 
     this.street1 = street1; 
    } 

    public String getStreet1() { 
     return street1; 
    } 

    public void setStreet1(String street1) { 
     this.street1 = street1; 
    } 

    @Override 
    public String toString() { 
     return street1; 
    } 
} 

Простая логика, чтобы проверить это:

private static void showUsers() { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.getTransaction().begin(); 
    List<User> users = session.createQuery("from User").list(); 

    for (User user : users) { 
     System.out.println(user.getName() + " -- > " + user.getAddresses()); 
    } 

    session.getTransaction().commit(); 
} 

private static void saveUsers() { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.getTransaction().begin(); 
    User user1 = new User("U1", new Address("A1"), new Address("A11")); 
    User user2 = new User("U2", new Address("A2")); 
    session.save(user1); 
    session.save(user2); 
    session.getTransaction().commit(); 
} 
+0

Можно ли все это сделать с помощью аннотаций? Класс сущности, который я использую, написан только с аннотациями. Я даже не уверен, возможно ли смешивать аннотации и .xml, но можете ли вы показать, как реплицировать это с помощью аннотаций? Было бы очень полезно! – James

+0

Также я предполагаю, что это будет работать независимо от того, установлен ли его набор или набор или набор и т. Д. – James

+0

Я пытаюсь решить эту проблему в течение нескольких недель с помощью аннотаций и не придумал рабочего решения. Просто чтобы быть ясным (я думаю, вы понимаете), но мне нужна коллекция столбцов из другой таблицы. Любые полезные/ссылки или решения для этого с помощью аннотаций, и я буду благодарен за жизнь! Я не думаю, что Гуглинг поможет, хотя я и попытался. – James