Как передать массив в базу данных в Java - PullRequest
1 голос
/ 25 июля 2011

Я создал новую базу данных derby с помощью hibernate. Я могу создать базу данных в Apache Derby. Я могу получить данные из узлов в xml. И сохранить их в массиве. ArrayList соответствует классу базы данных.

xml.java

       public class xml_read {

    public static void main(String argv[]) {

    try {

     File fXmlFile = new File("c:\\testing.xml");
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);
    doc.getDocumentElement().normalize();

   // System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
    NodeList nList = doc.getElementsByTagName("device");
   // System.out.println("-----------------------");

for (int temp = 0; temp < nList.getLength(); temp++) {

   Node nNode = nList.item(temp);       
   if (nNode.getNodeType() == Node.ELEMENT_NODE) {

     Element eElement = (Element) nNode;
     ArrayList arrayList = new ArrayList();

     //System.out.println(arrayList);
     String type=getTagValue("type", eElement);
     String Name=getTagValue("name", eElement);
     String Setup=getTagValue("setup", eElement);
     arrayList.add(type);
     arrayList.add(Name);
     arrayList.add(Setup);
     System.out.println(arrayList);
      System.out.println("type : "  + getTagValue("type",eElement));
      System.out.println("Name : "  + getTagValue("name",eElement));
      System.out.println("Set up : "  + getTagValue("setup",eElement));


    }
  }
       } catch (Exception e) {
           e.printStackTrace();
    }
   }

    private static String getTagValue(String sTag, Element eElement){
  NodeList nlList= eElement.getElementsByTagName(sTag).item(0).getChildNodes();
  Node nValue = (Node) nlList.item(0); 

  return nValue.getNodeValue();    
  }

 }

device.java

   public class Device  {
    private String type;
    private String setup;
    private String name;
    private Long deviceId;
    private Set<CommandInfo> commandSet = new HashSet<CommandInfo>(); 

    public Device() {

    }

    public Device(String name, String type, String setup) {
            System.out.println("name = "+name+" type = "+type+" setup = "+setup);
            this.name = name;
            this.type = type;
            this.setup = setup;
    }

    /**
     * @return the type
     */
    public String getType() {
        return type;
    }

    /**
     * @param type the type to set
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * @return the setup
     */
    public String getSetup() {
        return setup;
    }

    /**
     * @param setup the setup to set
     */
    public void setSetup(String setup) {
        this.setup = setup;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the id
     */
    @Id
    @GeneratedValue
    @Column(name = "DEVICE_ID")
    public Long getDeviceId() {
        return deviceId;
    }

    /**
     * @param id the id to set
     */
    public void setDeviceId(Long id) {
        this.deviceId = id;
    }

    /**
     * @return the commandSet
     */
    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "DEVICE_COMMAND", joinColumns = { 
            @JoinColumn(name = "DEVICE_ID") }, 
            inverseJoinColumns = { @JoinColumn(name = "COMMAND_ID") 
    })
    public Set<CommandInfo> getCommandSet() {
        return commandSet;
    }

    /**
     * @param commandSet the commandSet to set
     */
    public void setCommandSet(Set<CommandInfo> commandSet) {
        this.commandSet = commandSet;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Device [type=");
        builder.append(type);
        builder.append(", setup=");
        builder.append(setup);
        builder.append(", name=");
        builder.append(name);
        builder.append(", deviceId=");
        builder.append(deviceId);
        builder.append(", commandSet=");
        builder.append(commandSet);
        builder.append("]");
        return builder.toString();
    }


       }

Мне нужно передать значения массива в класс устройства. Может ли кто-нибудь помочь мне передать значение в класс устройства

1 Ответ

1 голос
/ 25 июля 2011

Если вы используете тип коллекции (например, Set в вашем случае), вы должны указать, как эта коллекция отображается в другую таблицу базы данных. Таким образом, в вашем объекте это непосредственно доступная коллекция подобъектов, но в вашей базе данных она все еще разделена на 2 таблицы, имеющие отношение 1: n или n: m.

Если вы используете JPA, просто укажите отношение в аннотации:

@OneToMany(mappedBy = "sale")
private List<Sale> saleList;

В JPA 2.0 вы даже можете не указывать отдельную сущность, если используете только базовые типы:

@ElementCollection@CollectionTable(name="item")
@Column(name="name")
private List<String> items;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...